Intersection Sphère Cône oblique

Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersection Sphère Cône oblique

Message non lu par GM » jeu. 1 avr. 2010, 13:13

GM a écrit :Je chercherai une prochaine fois l'erreur dans l'autre version.

J'ai trouvé quelques minutes pour chercher l'erreur... et j'ai trouvé : j'avais paramétré f pour que la base soit dans le plan d'équation z=0... et le fait que C ait pour cote -1 foirait le calcul.
En remplaçant la ligne

Code : Tout sélectionner

real k=t.y/S.z;

par

Code : Tout sélectionner

real k=(t.y-C.z)/(S.z-C.z);

on obtient la même figure qu'avec la méthode de la figure précédente.
intersection_sphere_coneoblique_4.png
intersection_sphere_coneoblique_4.png (72.26 Kio) Vu 12474 fois


Mais, sans avoir testé, j'imagine que l'on peut toujours obtenir des choses bizarres si on donne à la sphère un rayon tel que cela rapproche les deux courbes d'intersection.

La routine qui gère tous les cas... est loin d'être écrite ! Il faut y aller au cas par cas pour l'instant.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: Intersection Sphère Cône oblique

Message non lu par DK » jeu. 1 avr. 2010, 19:05

Bonsoir,

Donc on y est si on procède comme ca. Si je comprenais mieux ce que fait la fonction f, j'aurai pu proposer des solutions. Je vais faire des tests maintenant pour observer des conditions limites.
Une réflexion :
Si je comprends bien la méthode : On considère une génératrice du cône, du sommet à la "base" qui est un path3, on collecte ses intersections avec la surface (ici la sphère), on place le(s) point(s), on passe à un autre point de la base et donc à la génératrice suivante, on collecte les intersections avec la surface, on place le(s) point(s), ce qui petit à petit construit le(s) path qui sont la trace de(s) l'intersection(s).
En l'état actuel, je ne saurais pas programmer cela tout seul.

Si maintenant, on veut utiliser la fonction "revolution", est-ce possible? On a "un profil" parfaitement défini qui tourne autour d'un axe fixe. On peut concevoir que ce profil intercepte la "première" surface, et on peut d'ailleurs connaître le nombre d'intersections. On peut recommencer en faisant "tourner" cette courbe profil autour de son axe de révolution et faire apparaître les points d'intersection s'ils existent. Est-ce que cela semble suffisant pour faire le tracé de l'intersection entre les deux surfaces ? L'approche est naïve, mais elle devrait fonctionner pour des cas simple.
Bon cela ressemble à un algorithme, et cela m'éloigne un petit peu des cadrans solaires, mais c'est bien après-tout.
A bientôt.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersection Sphère Cône oblique

Message non lu par GM » jeu. 1 avr. 2010, 19:19

GM a écrit :
pivaldi a écrit :À partir du moment où l'on peut obtenir une équation implicite de l'intersection, on peut utiliser la routine contour comme dans l'exemple Impact de la documentation.
L'inconvénient est qu'il faut trouver une équation de l'intersection.

Je n'ai pas encore eu le temps de réfléchir à la faisabilité de cette méthode pour le problème de DK mais merci pour la piste. :)


J'aurais peut-être dû trouver le temps... car cela fonctionne très bien pour le cas envisagé ! :-)

Un troisième script donc qui donne la même figure précédente :

Code : Tout sélectionner

import graph3 ;
import contour;
size (250);
currentprojection=orthographic((20,20,20),up=Z);
currentlight=Viewport;

//// Caractéristiques du cône ////
real rc=3.5,         // rayon de la base du cône
     hc=9;           // hauteur du cône
triple pS=(0,0,8),  // sommet
       pC=(0,0,pS.z-hc); // centre de la base
surface lecone=shift(pC)*scale(rc,rc,hc)*unitcone;
real lambda=rc/hc;
real g(pair z){return pS.z-(sqrt(z.x^2+z.y^2))/lambda;} // équation z=g((x,y))

//// Caractéristiques la sphère ////
triple cs=(0,-3/2,4);  // centre de la sphère
real rs=3;             // rayon de la sphère
surface lasphere=shift(cs)*scale3(rs)*unitsphere;

//// Et on dessine le cône et la sphère...
draw(lecone,red+opacity(.8));
draw(lasphere,orange);

// Enfin l'intersection.
// De l'équation implicite d'un bicône x^2+y^2 = (lambda z)^2,
// on déduit l'équation z=g((x,y)) de notre cône particulier
// et avec l'équation implicite de la sphère (x-xs)^2+(y-ys)^2+(z-zs)^2-rs^2=0
// on peut déduire une équation implicite de l'intersection.
real f(pair z) {return (z.x-cs.x)^2+(z.y-cs.y)^2+(g(z)-cs.z)^2-rs^2;}
draw(lift(g,contour(f,(-rc,-rc),(rc,rc),new real[]{0})),linewidth(1bp)+green);

limits((0,0,0),(rc+1,rc+1,pS.z+1));
axes3("$x$","$y$","$z$",Arrow3);


Par rapport à l'exemple original de Philippe ... j'ai supprimé des choses car il y avait des paramètres a et b et aussi l'équation de l'intersection qui n'étaient pas suffisamment parlant pour moi.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersection Sphère Cône oblique

Message non lu par GM » jeu. 1 avr. 2010, 19:22

DK a écrit :Donc on y est si on procède comme ca.

Avant tout regarde ce que je viens de poster : la méthode suggérée par Philippe.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: Intersection Sphère Cône oblique

Message non lu par DK » jeu. 1 avr. 2010, 19:51

Oui, oui, très juste, je viens de lire le programme que j'aurai dû lire avant de me précipiter. Merci donc.

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: Intersection Sphère Cône oblique

Message non lu par DK » ven. 9 avr. 2010, 13:21

Voici le code source asy d'une figure expliquant comment sont créées les lignes horaires temporaires sur la surface de la sphère (céleste, rayon unité par définition). Le plan horizontal est l'horizon du lieu, l'origine du repère est l'observateur, le point du vue est préférentiellement l'Est. Les arcs S-e et S'-h sont les arc solsticiaux d'été et d'hiver respectivement, E-Eq est l'équateur. Les "jolies" courbes en jaune sont les lignes temporaires ou des portions de sinusoïdes sphériques.

J'aurais voulu tracer les points d'intersection entre chaque sinusoïde et les 3 arcs (été, équinoxe, hiver) : je n'y parvient pas...je sèche un peu (ce n'est pas grave pour mon argumentation de la figure, mais quand même, est-ce qu'Asymptote peut le faire? - sachant que les arcs dessinés ne sont pas exactement des arcs de cercle...).
J'aurai voulu aussi faire apparaître les sommets (ou crête) de chaque sinusoïde; lesquels se trouvent sur un arc de cercle (en dashdotted) d'axe l'axe des pôles, et parallèle bien sur à l'équateur. Là non plus je n'y suis pas parvenu ! Décidément...
Dernière chose, pour faire complet : j'ai tracé les arcs orientés +u et -u. J'y ai passé beaucoup de temps et j'ai trouvé une solution. Mais personnellement je trouve que c'est du bricolage, aussi n'existerai-t-il pas une meilleure solution pour juste obtenir le tracé d'un "arc de cotation" pour les angles (en 2D j'ai compris comment faire et quoi utiliser, mais en 3D?).

En tout cas, la figure proposée est assez compliqué quand même, et le pdf fait à peine 3,6 Mo, ce qui j'estime n'est pas trop vu les choses qu'il y a sur la figure ! Cela peut servir de modèle d'exemple après tout... Tout ceci a été fait à partir des nombreux exemples présents sur ce site (et celui de P. Ivaldi), sans lesquels je serais à peine capable de tracer un segment !

Le code :

Code : Tout sélectionner

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
//  Work  = Lycée Professionnel Pasteur
//      25 rue du Professeur Delvalle - 06000, Nice.
//   date  = 7 février 2010.
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Objet = Gnomonique théorique
// Lignes horaires Temporaire en usage dans l'antiquité.
// Figure : Définition de la différence ascensionnelle. (figure de Delambre revisitée)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
settings.outformat="pdf";
settings.prc=true;  // pour figure 3D manipulable à la souris sous Adobe Reader >7.
settings.tex="pdflatex";

//Appel des fichiers de macros.
import geoespace;
import graph3;
import solids;

//usepackage("mathrsfs");
usepackage("relsize");//règle la taille du texte...
usepackage("asycolors");
currentpen=fontsize(9);

//unitsize(1cm);
size(420,0);

dotgranularity=0; // Render dots as spheres.

// Réglages de la vue...
currentprojection=orthographic(3,10,8);
currentlight=(0,0,10);

//~~~~~~~~~ CONSTRUCTIONS des objets de la figure de Delambre ~~~~~~~~~
//latitude géographique du lieu du cadran solaire...               *
// *********************************************************************
   real phi=43+43/60;//(38+00/60); // Nice, bien sur...            *   <----      // 66+34/60
// *********************************************************************
real R=1; // Rayon de la sphère                        <----

// Construction de la demi-sphère céleste...
surface SphereCeleste=unithemisphere;   // Demi-sphère de rayon unité.
draw( surface( SphereCeleste) , lightblue+opacity(.4));

// Equateur Céleste...
path3 equateur=rotate((90-phi), -Y)*arc( (0,0,0), (0,R,0), (0,-R,0), Z, CW );
draw(equateur,0.75bp+dashed+3blue,Arrow3(Relative(1/8),size=7bp));

// Cercle limite des hectémories. Enveloppe des maxima...
triple centre_maximal=R*(0,0,Sin(90-phi));
path3 cercle_maximal = rotate((90-phi), -Y)*Circle(centre_maximal,R*Cos(90-phi),10);
draw(cercle_maximal,0.75bp+dashdotted+red);

// Paramètres de calcul : obliquité de l'écliptique, arcs semi-diurne (ou angle horaire des lever/coucher).
real deltamax=23+26/60;
real ue=aCos(-Tan(phi)*Tan(deltamax));  // arc semi-diurne en été.
real uh=aCos(-Tan(phi)*Tan(-deltamax)); // arc semi-diurne en hiver.
// La différence ascensionnelle : -u en hiver, +u en été... (pour une déclinaison max ou mini)
real diff_asc=aSin(Tan(phi)*Tan(deltamax));

// Construction des tropiques.
triple centre_tropique_ete=R*(0,0,Sin(deltamax) ),//centre du parallèle supérieur (sur l'axe des pôles)
      e1=R*(Cos(ue)*Cos(deltamax),Sin(ue)*Cos(deltamax),Sin(deltamax)   ) ,//pt lever
      e2=R*(Cos(-ue)*Cos(deltamax),Sin(-ue)*Cos(deltamax),Sin(deltamax) ) ;//pt coucher
path3 tropique_ete=rotate((90-phi), -Y)* arc( centre_tropique_ete, e1, e2 , Z, CW );// tropique du cancer
draw(tropique_ete,0.75bp+dashed+orange,Arrow3(Relative(1/8),size=7bp));

triple centre_tropique_hiver=R*(0,0,Sin(-deltamax) ),//centre du parallèle inférieur (sur l'axe des pôles)
      h1=R*(Cos(uh)*Cos(-deltamax),Sin(uh)*Cos(-deltamax),Sin(-deltamax)   ),//pt lever
      h2=R*(Cos(-uh)*Cos(-deltamax),Sin(-uh)*Cos(-deltamax),Sin(-deltamax) );//pt coucher
path3 tropique_hiver=rotate((90-phi),-Y)*arc( centre_tropique_hiver, h1, h2, Z, CW );// tropique du capricorne
draw(tropique_hiver,0.75bp+dashed+orange,Arrow3(Relative(1/8),size=7bp));
// Fin de la construction des tropiques.

real K=- cot(radians(phi)); // Il n'existe pas de fonction cotangente "Cot(.)" pour les degrés... C'est Curieux

// CONSTRUCTION des sinusoïdes sphériques - (voir aussi Chasles)...
for(int k=1; k < 7; ++k) { //

   real n=6/k ; // heure temporaire

   // Equation paramétrique des sinusoïdes sphériques (sur la sphère céleste)...
   real x(real t) {return R*Cos(t)/sqrt(1+(K*Cos(n*t))^2)       ;}
   real y(real t) {return R*Sin(t)/sqrt(1+(K*Cos(n*t))^2)       ;}
   real z(real t) {return R*K*Cos(n*t)/sqrt(1+(K*Cos(n*t))^2)    ;}

   // courbes hectémoréales.
   path3 hectemorie=rotate((90-phi), -Y)*graph(x,y,z,0,k*60/2, operator ..);
   draw(hectemorie, 1/1.8bp+3*yellow, Arrow3(7bp,Relative(.85)) );
   
} //fin de boucle.

//~~~~~~~~~ Quelques décors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

// Axes du repère 3D.
draw((-R,0,0)--(R+0.25,0,0),Arrow3);
draw((0,-R,0)--(0,R+0.2,0),Arrow3);
draw((0,0,0)--(0,0,R+0.2),Arrow3);
label("$x$", (R+0.2,0,0),sud);      // l'axe des x est orienté vers le sud.
label("$y$", (0,R+0.2,0),est);      // l'axe des y est orienté vers l'est.
label("$z$", (0,0,R+0.2),ouest);   // L'axe des z est l'axe vertical (zénith du lieu).

// Lettrage des Points : Pôle Nord Céleste, Sud, Nord (local) et zénith - (sur l'axe Ox)
triple Eq=rotate((90-phi), -Y)*(R,0,0),
      PoleNord=rotate((90-phi), -Y)*(0,0,R),
      Sud=(R,0,0),
      Nord=(-R,0,0),
      Zenith=(0,0,R)   ;
dot("$E_q$",Eq,nouest,3bp+red);      // Equateur
dot("$P$",PoleNord,nest,3bp+black);   //Pôle nord céleste
dot("$S_d$",Sud,ouest,3bp+blue);   //Sud local
dot("$N$",Nord,est,3bp+blue);      //nord local
dot("$Z$",Zenith,nouest,3bp+black);   //zénith du lieu
dot("$E$",(0,R,0),souest,3bp+blue);   //Est
dot((0,-R,0),2bp+blue);   //Ouest
// Lettrage sur les tropiques (au méridien).
dot("$e$",rotate((90-phi),-Y)*(R*Cos(deltamax),0,R*Sin(deltamax)),nouest,3bp+black);
dot("$h$",rotate((90-phi),-Y)*(R*Cos(-deltamax),0,R*Sin(-deltamax)),nouest,3bp+black);
// Lettrage aux levers du soleil pour les tropiques.
dot("$S$",rotate((90-phi),-Y)*e1,sud,3bp+black);      // point du lever en été.
dot("$S^\prime$",rotate((90-phi),-Y)*h1,sud,3bp+black);   // point du lever en hiver.

// arc méridien
path3 ArcMeridien=arc((0,0,0), (R,0,0), (-R,0,0), Y, CW);
draw(ArcMeridien,1bp+red);

// Tracé de l'axe équatorial.
draw((0,0,0)--Eq,0.75bp+deepblue+dashed);
// Tracé de l'axe des pôles
draw((0,0,0)--PoleNord,dashed+0.75bp+deepblue);

// arcs pour les différences ascensionnelles +/- u :
path3 Arc_ete      =rotate((90-phi), -Y)*arc((0,0,0), (0,0,R),    e1  , CCW);
path3 Arc_hiver      =rotate((90-phi), -Y)*arc((0,0,0), (0,0,R),    h1  , CCW);
path3 Arc_equateur   =rotate((90-phi), -Y)*arc((0,0,0), (0,0,R), (0,R,0), CCW);
draw(Arc_ete,1bp+10*white);
draw(Arc_hiver,1bp+10*white);
draw(Arc_equateur,1bp+white);

// Ci-après, c'est un peu du bidouillage, tout ça pour marquer les angles +/- u...
// Peut-on mieux faire?
// marquage des angles +u et -u... les différences ascensionnelles.
real alpha1=22; // réglage la position de l'arc le long de l'axe de pôles...
triple centre_arc=R*(0,0,Sin(90-alpha1)), // centre de l'arc de cercle pour u.
       arc10=R*(0,Cos(90-alpha1),Sin(90-alpha1)) , // point sur l'arc perp. au méridien
          arc11=R*(Cos(ue)*Cos(90-alpha1),Sin(ue)*Cos(90-alpha1),Sin(90-alpha1));// point sur l'arc de u...
path3 arc1 = rotate((90-phi), -Y)* arc(centre_arc, arc10, arc11 , CCW);
draw( arc1, 0.75bp+heavyblue, Arrow3(5bp) );

real alpha2=20; // réglage la position de l'arc le long de l'axe de pôles...
triple    arc20=R*(0,Cos(90-alpha2),Sin(90-alpha2)) ,
          arc21=R*(Cos(uh)*Cos(90-alpha2),Sin(uh)*Cos(90-alpha2),Sin(90-alpha2));
path3 arc2 = rotate((90-phi), -Y)* arc(centre_arc, arc20, arc21 , CCW);
draw( arc2, 0.75bp+heavyblue, Arrow3(5bp) );

triple arc15=R*(Cos(ue-diff_asc/2)*Cos(90-alpha1),Sin(ue-diff_asc/2)*Cos(90-alpha1),Sin(90-alpha1)),
      arc16=R*(Cos(uh+diff_asc/2)*Cos(90-alpha2),Sin(uh+diff_asc/2)*Cos(90-alpha2),Sin(90-alpha2));
label("\relsize{-1.5}{$+u$}",rotate((90-phi),-Y)*arc15,souest+0.5bp,deepblue);//marquage de +u.
label("\relsize{-1.5}{$-u$}",rotate((90-phi),-Y)*arc16,souest+0.15bp,deepblue);// marquage de -u.


shipout(bbox(0.5cm));//pour encadrer et laisser une marge sur le dessin.


La jolie figure :
differenceascentionnelle.png
differenceascentionnelle.png (187.28 Kio) Vu 12441 fois

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersection Sphère Cône oblique

Message non lu par GM » ven. 9 avr. 2010, 14:16

Effectivement : jolie figure !!

Je n'ai pas le temps de regarder maintenant pour les questions... mais je le ferai.

___________________________________

NB : je songe tôt ou tard... à déplacer ce sujet dans la partie "Demande d'aide" ... et j'ouvrirai dans ce sous-forum un nouveau sujet à sa place... avec les exemples finalisés.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersection Sphère Cône oblique

Message non lu par GM » sam. 10 avr. 2010, 11:19

Je réponds à une partie... du message avant de partir.
DK a écrit :Voici le code source asy d'une figure


Une remarque sur le début : pourquoi toujours ce geoespace, si tu n'utilises pas ses spécificités (non adaptées dans ton cas !) ?? Il ne faut pas qu'il soit présent si tu veux pouvoir animer la figure !!
Si tu le mets pour ses notations des directions...

Code : Tout sélectionner

pair nord=(0,1),sud=(0,-1),est=(1,0),ouest=(-1,0),nouest=(-1,1),nest=(1,1),souest=(-1,-1),sest=(1,-1);
reprends uniquement cette partie du code qui t'intéresse (voire définis ton propre fichier de définitions).
Si tu le supprimes, il faudra ajouter

Code : Tout sélectionner

import math;
pour avoir cot notamment.

DK a écrit :J'aurais voulu tracer les points d'intersection entre chaque sinusoïde et les 3 arcs (été, équinoxe, hiver) : je n'y parviens pas...je sèche un peu (ce n'est pas grave pour mon argumentation de la figure, mais quand même, est-ce qu'Asymptote peut le faire? - sachant que les arcs dessinés ne sont pas exactement des arcs de cercle...).


Pas le temps de regarder le problème avant mon retour... sinon je vais me faire disputer. :-)

DK a écrit :J'aurai voulu aussi faire apparaître les sommets (ou crête) de chaque sinusoïde; lesquels se trouvent sur un arc de cercle (en dashdotted) d'axe l'axe des pôles, et parallèle bien sur à l'équateur. Là non plus je n'y suis pas parvenu !


Même remarque. D'autres auront peut-être du temps... ;-)

DK a écrit :Dernière chose, pour faire complet : j'ai tracé les arcs orientés +u et -u. J'y ai passé beaucoup de temps et j'ai trouvé une solution. Mais personnellement je trouve que c'est du bricolage, aussi n'existerai-t-il pas une meilleure solution pour juste obtenir le tracé d'un "arc de cotation" pour les angles (en 2D j'ai compris comment faire et quoi utiliser, mais en 3D?).// Ci-après, c'est un peu du bidouillage, tout ça pour marquer les angles +/- u...


Je propose au moins une chose : de remplacer cela :

Code : Tout sélectionner

// Peut-on mieux faire?
// marquage des angles +u et -u... les différences ascensionnelles.
real alpha1=22; // réglage la position de l'arc le long de l'axe de pôles...
triple centre_arc=R*(0,0,Sin(90-alpha1)), // centre de l'arc de cercle pour u.
       arc10=R*(0,Cos(90-alpha1),Sin(90-alpha1)) , // point sur l'arc perp. au méridien
          arc11=R*(Cos(ue)*Cos(90-alpha1),Sin(ue)*Cos(90-alpha1),Sin(90-alpha1));// point sur l'arc de u...
path3 arc1 = rotate((90-phi), -Y)* arc(centre_arc, arc10, arc11 , CCW);
draw( arc1, 0.75bp+heavyblue, Arrow3(5bp) );

real alpha2=20; // réglage la position de l'arc le long de l'axe de pôles...
triple    arc20=R*(0,Cos(90-alpha2),Sin(90-alpha2)) ,
          arc21=R*(Cos(uh)*Cos(90-alpha2),Sin(uh)*Cos(90-alpha2),Sin(90-alpha2));
path3 arc2 = rotate((90-phi), -Y)* arc(centre_arc, arc20, arc21 , CCW);
draw( arc2, 0.75bp+heavyblue, Arrow3(5bp) );

triple arc15=R*(Cos(ue-diff_asc/2)*Cos(90-alpha1),Sin(ue-diff_asc/2)*Cos(90-alpha1),Sin(90-alpha1)),
      arc16=R*(Cos(uh+diff_asc/2)*Cos(90-alpha2),Sin(uh+diff_asc/2)*Cos(90-alpha2),Sin(90-alpha2));
label("\relsize{-1.5}{$+u$}",rotate((90-phi),-Y)*arc15,souest+0.5bp,deepblue);//marquage de +u.
label("\relsize{-1.5}{$-u$}",rotate((90-phi),-Y)*arc16,souest+0.15bp,deepblue);// marquage de -u.


par quelque chose comme cela :

Code : Tout sélectionner

real posu=.5, thi=arctime(Arc_hiver,posu), teq=arctime(Arc_equateur,posu), tet=arctime(Arc_ete,posu);
triple pAHi=point(Arc_hiver,thi), pAEq=point(Arc_equateur,teq), pAEt=point(Arc_ete,tet);
triple centrearc=planeproject(PoleNord,pAEq)*O;
dot(pAEq,3bp+red);
draw(Label("\relsize{-1.5}{$-u$}",align=SW),arc(centrearc,pAEq,pAHi,true),0.75bp+heavyblue,Arrow3(5bp));
draw(Label("\relsize{-1.5}{$+u$}",align=S),arc(centrearc,pAEq,pAEt,true),0.75bp+heavyblue,Arrow3(5bp));   
draw(pAHi--centrearc--pAEq^^centrearc--pAEt,purple);   
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

DK
Messages : 57
Enregistré le : ven. 26 mars 2010, 17:23

Re: Intersection Sphère Cône oblique

Message non lu par DK » sam. 10 avr. 2010, 14:24

Merci pour le morceau de code pour le marquage des angles sur la sphère. Je ne connaissais pas "arctime()". C'est donc bien plus efficace que mon bidouillage ! Super donc. Tout marche très bien.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersection Sphère Cône oblique

Message non lu par GM » sam. 10 avr. 2010, 14:34

DK a écrit :Je ne connaissais pas "arctime()".

Je n'en ai pas encore mis d'exemples d'utilisation pour la 3D... mais on peut extrapoler de ces trois exemples pour les path (lien vers le premier et voir les deux suivants) des choses pour les paths3.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre