Intersections de quadriques...

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: Intersections de quadriques...

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

DK a écrit :En fait j'ai tracé la sinusoïde sur la sphère mais ce que je voudrais c'est bien sûr la tracer comme étant l'intersection de cette surface conique ondulé avec la sphère. Donc bien sur si R=r, la sinusoide se trouve sur la surface et du coup plus la peine de tracer le cône ondulé.
Donc votre idée de faire apparaître les segments générateurs du cône est bonne, et il faut ensuite tracer leur intersection avec la sphère pour faire apparaître la fameuse sinusoïde.

Mais non... pour ce cas particulier, ceci doit être suffisant :

Code : Tout sélectionner

import math;
import graph3;
size(10cm);
currentprojection=orthographic(5,5,3);
real a=0.75, r=3/2;
limits(-a*(r,r,r),a*(r,r,r));
real phi=(43+43/60);
real R=1;
real K=-cot(phi*pi/180);
real k=2,  n=6/k ;
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)    ;}
path3 ps=graph(x,y,z,0,2*k*pi,operator ..)--cycle; // profil pour créer la surface hectémoréale.
surface hectemoreale=surface(ps);
draw(hectemoreale, lightblue);
real rs=.7;
surface Objet=scale3(rs)*unitsphere;
draw(Objet,lightgreen);
R=rs;
path3 psi=graph(x,y,z,0,2*k*pi, operator ..)..cycle; // intersection = profil avec R = rs
draw(psi,4bp+red);
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: Intersections de quadriques...

Message non lu par DK » lun. 5 avr. 2010, 15:49

Bonjour,

Je me suis servi de votre réponse incluant celle de P. Ivalvdi, qui consistait, dans son principe, à déterminer l'équation implicite de l'intersection entre le cône et la sphère.
Je n'ai eu qu'à l'adapter à ma situation particulière (intersection sphère - Cône ondulée (ou surface hectémoréale)).
Voici le code :

Code : Tout sélectionner

import graph3 ;
import contour;
import math;// à cause de la présence de la cotangente....

size (300);
currentprojection=orthographic((20,10,4),up=Z);
currentlight=Viewport;

real phi=(43+43/60); // Latitude de Nice...
real K = cot(radians(phi));

//// Caractéristique de la surface hectémoréale donnant la ligne horaire temporaire de 3h////
// On a ajouté 1/1000 afin d'éviter la division par zéro...
// On donne l'équation sous la forme :  z=g((x,y))
real g(pair z){return K*z.x*(3*z.y^2-z.x^2)/(z.x^2+z.y^2 + 1/1000);}

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

//// Et on dessine la sphère...
draw(lasphere,orange+opacity(0.9));

// Enfin l'intersection avec la surface hectémoréale.
// De l'équation implicite de la surface f(x,y,z)=0,
// on déduit l'équation z=g((x,y)) de notre genre de cône ondulé particulier
// et avec l'équation implicite de la sphère céleste (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,(-rs,-rs),(rs,rs),new real[]{0})),linewidth(1.5bp)+blue);

limits((0,0,0),(rs+1,rs+1,rs+1));
axes3("$x$","$y$","$z$",Arrow3);
\

Ce qui donne l'image suivante :
Sans-titre.png
Intersection Sphère-Surface hectémoréale
Sans-titre.png (208.07 Kio) Vu 8274 fois

Je n'ai pas dessiné la surface cônique ondulée, seule l'intersection suffit.
Je n'ai pas eu besoin non plus de connaître l'équation de la courbe tracée sur la sphère (qui est une sinusoïde sphérique). Cela répond à mon problème initial : l'intersection de deux surfaces, sans avoir besoin spécialement de connaître l'équation de leur intersection.

Merci beaucoup pour ce travail et pour votre patience.
Je vais de mon côté tenter de remplacer la sphère par un cône, un cylindre et puis finalement un plan...

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

Re: Intersections de quadriques...

Message non lu par GM » lun. 5 avr. 2010, 16:24

DK a écrit :Je me suis servi de votre réponse incluant celle de P. Ivalvdi, qui consistait, dans son principe, à déterminer l'équation implicite de l'intersection entre le cône et la sphère.
Je n'ai eu qu'à l'adapter à ma situation particulière (intersection sphère - Cône ondulée (ou surface hectémoréale)).


Je ne comprends plus... car cette figure, on l'a depuis le début... avec ton code que j'avais à peine adapté et donné une ou deux fois.

La nouvelle façon de faire est différente mais on obtient toujours la même chose : ce que l'on avait déjà, depuis la première figure, non ?

Code : Tout sélectionner

import math;
import graph3;
size(250);
currentprojection=orthographic((20,10,4),up=Z);
currentlight=nolight;
real a=0.75, r=3/2;
limits(-a*(r,r,r),a*(r,r,r));
real phi=(43+43/60);
real R=1;
real K=-cot(phi*pi/180);
real k=2,  n=6/k ;
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);}
path3 ps=graph(x,y,z,0,2*k*pi,operator ..)--cycle; // profil pour créer la surface hectémoréale.
//surface hectemoreale=surface(ps);
//draw(hectemoreale, lightblue);
real rs=.7;
surface Objet=scale3(rs)*unitsphere;
draw(Objet,rgb(185/255,103/255,38/255)+opacity(.9));
R=rs;
path3 ps=graph(x,y,z,0,2*k*pi, operator ..)..cycle; // intersection = profil avec R = rs
draw(ps,2bp+.7red);


surface_hectemoreale.png
surface_hectemoreale.png (33.07 Kio) Vu 8273 fois


C'est juste la figure déjà donnée, sans le cône, avec un angle de vue un peu différent et des couleurs différentes... mais il n'y a rien de nouveau et je ne vois pourquoi avoir changé de méthode pour cette figure particulière.
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: Intersections de quadriques...

Message non lu par DK » lun. 5 avr. 2010, 18:17

Ce qui a changé, c'est que j'utilise l'équation du cône ondulé et non plus les équations paramétriques de la sinusoïde sphérique. Ce qui change c'est qu'on utilise l'intersection de deux surfaces et non plus la courbe paramétrique solution de l'intersection. J'ai tourné en rond (il y a quelques mois) pour comprendre que l'intersection de ces deux surfaces était une sinusoïde sphérique. Je voulais savoir si asymptote pouvait me tracer (ou faire apparaître) cette courbe sans connaître son équation : on a la réponse maintenant. (un oui, mais avec des restrictions...)
Et après ?
Je vais pouvoir tracer l'intersection du cône ondulé (que j'ai appelé surface hectémoréale) avec une autre surface, sans avoir besoin de connaître l'équation paramétrique (ou autre) de la courbe intersection. Mon approche se veux donc "visuelle" pour le moment...
Je crois que cela apporte quelques "nouveautés" ou du moins un aspect des possibilités d'Asymptote.
Je ne sais pas si j'ai répondu clairement à votre interrogation.

Je peux poser un autre problème voisin : quelle est l'intersection de cette surface ondulée avec un cône, un cylindre? (cela, parce que trouver l'équation de la courbe intersection sur un cône n'est pas évident du tout !).

Pour étendre la situation :
Soit S1 une surface dont on connaît l'équation implicite f1(x,y,z)=0. Supposons que l'on puisse l'écrire sous la forme z=g(x,y) (ce qui n'est pas toujours possible bien sûr).
Soit S2 une autre surface d'équation implicite f2(x,y,z)=0.
Est-ce que l'équation implicite de leur intersection est l'équation : f2(x,y, g(x,y))=0?

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

Re: Intersections de quadriques...

Message non lu par DK » lun. 5 avr. 2010, 18:23

J'ajoute que puisque vous avez réussi à trouver comment faire pour tracer ma figure, bien sûr mon problème est résolu pour cette figure. C'est déjà beaucoup. Merci à vous et spécialement à GM !

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

Re: Intersections de quadriques...

Message non lu par GM » lun. 5 avr. 2010, 18:34

DK a écrit :Je ne sais pas si j'ai répondu clairement à votre interrogation.

Pour moi, oui.

DK a écrit :Pour étendre la situation :
Soit S1 une surface dont on connaît l'équation implicite f1(x,y,z)=0. Supposons que l'on puisse l'écrire sous la forme z=g(x,y) (ce qui n'est pas toujours possible bien sûr).
Soit S2 une autre surface d'équation implicite f2(x,y,z)=0.
Est-ce que l'équation implicite de leur intersection est l'équation : f2(x,y, g(x,y))=0?

A vrai dire, je n'avais jamais pratiqué cela et je ne savais pas si cela allait passer avant de le tenter.
L'idée m'est venue après avoir eu du mal à comprendre les équations de l'exemple de Philippe.
J'avais envie d'y reconnaitre la forme canonique de l'équation d'une sphère... et j'ai tenté le coup.
Comme je n'étais pas sûr que la syntaxe passerait avant de compiler... je me garderai de dire que cela va toujours aller, avant d'avoir testé suffisamment d'autres exemples.
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: Intersections de quadriques...

Message non lu par GM » lun. 5 avr. 2010, 18:42

La même technique pour l'intersection bicône avec plusieurs plans parallèles :

Figure asymptote 50730fdd362a48f55d5464e13f5dfd68
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph3 ;
  2. import contour;
  3. size (250);
  4. currentprojection=orthographic((20,0,0),up=Y);
  5. currentlight=Viewport;
  6.  
  7. //// Caractéristique du cône ////
  8. real rc=3.5, // rayon de la base du cône
  9. hc=9; // hauteur du cône
  10. triple sc=(0,0,0), // sommet du cône
  11. cb=(0,0,sc.z-hc); // centre de la base
  12. surface lecone1=shift(cb)*scale(rc,rc,hc)*unitcone,
  13. lecone2=reflect(sc,sc+X,sc+Y)*lecone1;
  14. real lambda=rc/hc;
  15. real g1(pair z){return (sqrt(z.x^2+z.y^2))/lambda;} // équation z=g((x,y))
  16. real g2(pair z){return -(sqrt(z.x^2+z.y^2))/lambda;} // équation z=g((x,y))
  17.  
  18. draw(lecone1,red);
  19. draw(lecone2,blue);
  20.  
  21. real a=0, b=1, c=1;
  22.  
  23. real f1(pair z) {return a*z.x+b*z.y+c*g1(z);}
  24. draw(lift(g1,contour(f1,(-rc,-rc),(rc,rc),new real[]{3,4,5})),linewidth(1bp)+green);
  25. real f2(pair z) {return a*z.x+b*z.y+c*g2(z);}
  26. draw(lift(g2,contour(f2,(-rc,-rc),(rc,rc),new real[]{-7,-8})),linewidth(1bp)+purple);
  27.  
  28. limits((-rc,-rc,-hc-1),(rc,rc,hc+1));
  29. axes3("$x$","$y$","$z$",Arrow3);
  30.  


Un problème : apparemment l'intersection peut sortir du cône !?!?
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
pivaldi
V.I.P.
V.I.P.
Messages : 24
Enregistré le : jeu. 11 mars 2010, 21:09
Contact :

Re: Intersections de quadriques...

Message non lu par pivaldi » lun. 5 avr. 2010, 18:46

GM a écrit :
DK a écrit :Pour étendre la situation :
Soit S1 une surface dont on connaît l'équation implicite f1(x,y,z)=0. Supposons que l'on puisse l'écrire sous la forme z=g(x,y) (ce qui n'est pas toujours possible bien sûr).
Soit S2 une autre surface d'équation implicite f2(x,y,z)=0.
Est-ce que l'équation implicite de leur intersection est l'équation : f2(x,y, g(x,y))=0?

A vrai dire, je n'avais jamais pratiqué cela et je ne savais pas si cela allait passer avant de le tenter.
L'idée m'est venue après avoir eu du mal à comprendre les équations de l'exemple de Philippe.
J'avais envie d'y reconnaitre la forme canonique de l'équation d'une sphère... et j'ai tenté le coup.
Comme je n'étais pas sûr que la syntaxe passerait avant de compiler... je me garderai de dire que cela va toujours aller, avant d'avoir testé suffisamment d'autres exemples.

Je ne vois aucune raison qui ferait que ça ne marche pas…

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

Re: Intersections de quadriques...

Message non lu par GM » lun. 5 avr. 2010, 19:08

pivaldi a écrit :Je ne vois aucune raison qui ferait que ça ne marche pas…

C'était mon sentiment aussi... avant d'obtenir des choses bizarres

Cela compile ok... mais que penser de cela :

2010-04-05_200514.png
2010-04-05_200514.png (70.13 Kio) Vu 8258 fois


Code : Tout sélectionner

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

//// Caractéristique du cône ////
real    rc=3.5,     // rayon de la base du cône
        hc=9;       // hauteur du cône
triple  sc=(0,0,0), // sommet du cône
        cb=(0,0,sc.z-hc); // centre de la base
surface lecone1=shift(cb)*scale(rc,rc,hc)*unitcone,
        lecone2=reflect(sc,sc+X,sc+Y)*lecone1;
real    lambda=rc/hc;
real g1(pair z){return (sqrt(z.x^2+z.y^2))/lambda;} // équation z=g((x,y))
real g2(pair z){return -(sqrt(z.x^2+z.y^2))/lambda;} // équation z=g((x,y))

//draw(lecone1,red);
draw(lecone2,blue);

real   a=1, b=1, c=1;

real f1(pair z) {return a*z.x+b*z.y+c*g1(z);}
draw(lift(g1,contour(f1,(-rc,-rc),(rc,rc),new real[]{3,4,5,6})),linewidth(1bp)+green);
// real f2(pair z) {return a*z.x+b*z.y+c*g2(z);}
// draw(lift(g2,contour(f2,(-rc,-rc),(rc,rc),new real[]{-7,-8})),linewidth(1bp)+purple);

limits((-rc,-rc,-hc-1),(rc,rc,hc+1));
axes3("$x$","$y$","$z$",Arrow3);
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: Intersections de quadriques...

Message non lu par DK » lun. 5 avr. 2010, 19:22

j'ai essayé l'intersection de deux sphères (simple non? - eh bien non !) :

Code : Tout sélectionner

import graph3 ;
import contour;

size(250);
currentprojection=orthographic((20,10,4),up=Z);
currentlight=Viewport;

//// Caractéristiques de la surface S1 : sphère 1 ////
triple c1=(0,0,0);     // centre de la sphère
real     r1=2;              // rayon de la sphère
surface sphere1=shift(c1)*scale3(r1)*unitsphere;
draw(sphere1, lightred);
// équation z=g((x,y)) pour la surface S1 :
real g(pair z){return  c1.z + sqrt(r1^2 - ( (z.x-c1.x)^2 + (z.y-c1.y)^2) ) ;} // l'embêtant est d'avoir +/- sqrt(...) \\ j'ai pris le signe+

//// Caractéristiques la surface S2 : sphère 2 ////
triple c2=(0,0,2);     // centre de la sphère
real     r2=2;              // rayon de la sphère
surface sphere2=shift(c2)*scale3(r2)*unitsphere;
draw(sphere2, lightgreen+opacity(0.9));

// avec l'équation implicite de la sphère S2 : (x-x2)^2+(y-y2)^2+(z-z2)^2-r2^2=0
// on peut déduire une équation implicite de l'intersection ?
real f(pair z) {return (z.x-c2.x)^2+(z.y-c2.y)^2+(g(z)-c2.z)^2-r2^2;}
draw(lift(g,contour(f,(-r2,-r2),(r2,r2),new real[]{0})),linewidth(1.5bp)+yellow); // sachant que je n'ai pas encore bien compris ces fonctions...

limits((0,0,0),(r2+1,r2+1,r2+1));
axes3("$x$","$y$","$z$",Arrow3);

A la compilation j'ai le message suivant si je copie l'écran du terminal :
macbook-pro:figure1 COLLIN[tex] asy colisions_1.asy
/usr/local/share/asymptote/contour.asy: 204.13: delete called on array of length 4 with out-of-bounds index range [-1,-1]
macbook-pro:figure1 COLLIN
La compilation est faite malgré l'erreur et donne la figure sans la courbe intersection recherchée... voici une copie d'écran :
collision_1.tiff
essai d'intersection de deux sphères :
collision_1.tiff (101.03 Kio) Vu 8256 fois

Qu'est-ce qui ne va pas? Quelle solution?

Répondre