
Estoy usando Asymptote versión 2.80 en una PC W10. Intento reutilizar un código antiguo (2019) para trazar la intersección de una esfera con un cono. Se une el dibujo generado en 2019. ?
Lo hice en 2019, pero cuando compilo ahora aparece el siguiente mensaje de error:
if(s.triangular) abortar(triangular); ^ C:\Program Files\Asymptote2_80/tres_surface.asy: 1296.25: la intersección de la ruta 3 con el triángulo de Bézier aún no está implementada.
El código es el siguiente: todos los pasos de construcción están dibujados.
\begin{figure}[h]
\centering
\begin{asy}
size(10cm);
import graph3;
currentprojection=orthographic((5,1,2),up=Z);
settings.render=4; // Pose pb si =0 : Le plan devant la sphere est absent
settings.prc=false;
currentlight=Viewport;
real k=1;
path3 Directrice = rotate(30,Y)*unitcircle3;
draw(Directrice,orange);
triple S=(0,-1.5,2);
draw(Label ("S",green),S);
path3 Directrice = rotate(60,-Y)*unitcircle3;
path3 Directrice = shift(1.5,0,0)*Directrice;
triple P1 = relpoint(Directrice,0);
triple P2 = relpoint(Directrice,0.25);
triple P3 = relpoint(Directrice,0.5);
triple P4 = relpoint(Directrice,0.75);
// t.x => point m de D -- t.y => facteur k
triple f(pair t) {
triple Point =relpoint(Directrice,t.x);
real X= S.x+t.y*(Point.x-S.x);
real Y= S.y+t.y*(Point.y-S.y);
real Z= S.z+t.y*(Point.z-S.z);
//dot((X,Y,Z),orange);
return (X,Y,Z);
}
surface s1=surface(f,(0,0),(1,1),36,36,Spline);
draw(s1,orange+opacity(.7));
surface sph=shift(0,0,0)*scale3(1)*unitsphere;
draw(sph,blue);
limits((0,0,0),(k+2,k+2,k+2));
xaxis3("$x$",Arrow3);
yaxis3("$y$",Arrow3);
zaxis3("$z$",Arrow3);
draw(Directrice,red);
dot(Directrice^^S,orange);
// size(p) = C'est le nombre de points qui définissent le path p
for(int i=0; i<size(Directrice);++i) {
draw(point(Directrice,i)--S,dashed);
}
/////// INTERSECTION -- On recherche les points d'intersection de 100 segments [Sm] avec la sphère.
triple[][] inter;
path3 ch1,ch2;
int n=100;
for(int i=0; i<n; ++i){
path3 p=S--relpoint(Directrice,i/n);
inter.push(intersectionpoints(p,sph,0.001));
draw(p,yellow);
}
for(int i=0; i<inter.length; ++i){
if (inter[i].length!=0){
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+red);}
}
draw(ch1..cycle,1bp+green);
draw(ch2..cycle,1bp+red);
// Il reste à fermer la boucle : du 1er point de construction de ch1 au 1er point de construction ce ch2, et idem pour le dernier point
draw(point(ch1,0)..point(ch2,0),5bp+orange );
draw(point(ch1,(size(ch1)-1) )..point(ch2,(size(ch2)-1) ) ,5bp+orange );
\end{asy}
\caption{Projection gnomonique 3D \label{Fig_Proj_Gnomo_3D} }
\end{figure}
¿Cuáles son los puntos de intersección (entre qué y qué) puedo pedir que me devuelvan la sintonía?
La idea es dibujar la proyección gnomónica de un paralelo terrestre en un plano tangente al polo norte, luego a un plano tangente al ecuador, luego a un plano tangente a 50 grados de latitud Norte: cualquier solución sin utilizar "puntos de intersección" es bienvenida.