DK a écrit:Bonsoir,
J'ai regardé votre code. Je n'ai pas encore tout compris, mais cela ne m'empêche pas de comprendre l'idée sur les intersections ! Ce que je n'ai pas compris c'est le rôle de "triple f(pair t) {
real th=t.x;
real k=t.y/lx;
real x=t.y;
real y=relpoint(p,th).y*k+S.y*(1-k);
real z=relpoint(p,th).z*k+S.z*(1-k);
return (x,y,z);
}"...
Pour tracer un simple cône de révolution, on peut faire plus simple mais je voulais pouvoir :
- tracer un cône quelconque (pas nécessairement droit) et à base quelconque ;
- restreindre le cône à un tronc de cône, voire au contraire tracer un bicône : cela dépend des valeurs données à hmin, hmax ;
- pouvoir "ouvrir" le cône, et voir une intersection à l'intérieur du cône (sans mettre de transparence qui pose des problèmes du type artefact) : cela dépend de thmin et thmax (avec les valeurs respectives 0 (theta=0) et 1 (theta=360°), on a un tour complet.
DK a écrit:C'est vrai que cela restreint au cône.
J'ai tenté de modifier quelque peu le cône, mais je n'y suis pas vraiment arrivé et je n'ai en rien modifié justement le "triple f(pair t) ...".
On peut supprimer ces facilités... si on est sûr de vouloir un cône classique de révolution d'une hauteur donnée et non ouvert.
DK a écrit:Lorsque l'intersection du cône avec la sphère engendre deux courbes, voilà de ce que cela donne. Je pense que l'on y est presque. La boucle en jaune que l'on peut voir est seulement le passage d'un point à l'autre sur le path intersection, parce qu'il n'a pas été prévu de gérer deux intersections différentes.
Effectivement, ce n'était pas prévu.
Avec ceci, on sera plus proche du résultat :
- Code: Tout sélectionner
/////// INTERSECTION
triple[][] inter;
path3 ch1,ch2;
int n=100;
for(int i=0; i<n; ++i){
path3 p=S--f( (thmin+i*(thmax-thmin)/n,hmin) );
inter.push(intersectionpoints(p,sph));
}
for(int i=0; i<inter.length; ++i){
ch1=ch1..inter[i][0]; dot(inter[i][0],2bp+green);
if(inter[i].length==2){
ch2=ch2..inter[i][1]; dot(inter[i][1],2bp+green);}
}
draw(ch1..cycle,1bp+yellow);
draw(ch2..cycle,1bp+blue);
Mais il va rester des problèmes liés au fait que l'on a le cône presque tangent à la sphère.
Je ne sais pas si c'était voulu...
... mais je signale que le rendu est bon si on augmente un peu le rayon de la sphère.
Si le cône doit être tangent à la sphère... je pense qu'il faudra revoir la façon de faire pour avoir quelque chose de satisfaisant à la jonction.
Je n'aurai personnellement pas le temps de chercher comment mieux faire avant vendredi soir, voire samedi matin.