Intersections de quadriques...
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 :
On va gagner du temps dans les réponses !
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 :
- Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
- Version d'Asymptote et éditeur utilisé pour les figures Asymptote
- Distribution LaTeX et éditeur utilisé pour les tex.
On va gagner du temps dans les réponses !
Intersections de quadriques...
Bonjour,
Voici ma problématique : Je souhaiterais faire apparaître la trace laissée par l'intersection de deux quadriques... sans avoir à connaître la courbe 3D, résultat de leur intersection. Exemple : faire apparaître l'intersection entre une sphère et un cône (courbe de Viviani), un cône et un cylindre, deux hyperboloïdes, etc...
Ce problème n'est pas simple et je n'ai pas encore trouvé comment faire avec Asymptote.
Le logiciel de raytring "PovRay" permet de faire apparaître le tracé de l'intersection de deux quadriques, mais je me suis plongé dans Asymptote et j'ai été accroché par cet outil (surtout pour la 3D et les fichiers PDF générés !). D'ailleurs du point de vu code ils se ressemblent un peu (mais étant novice je n'en sais pas plus).
Je souhaiterai savoir si Asymptote permet de faire de tels tracés.
En tout cas, pour d'autre choses, j'ai trouvé pas mal d'idées et de réponses qui m'ont bien permis de progresser avec Asymptote.
Voici ma problématique : Je souhaiterais faire apparaître la trace laissée par l'intersection de deux quadriques... sans avoir à connaître la courbe 3D, résultat de leur intersection. Exemple : faire apparaître l'intersection entre une sphère et un cône (courbe de Viviani), un cône et un cylindre, deux hyperboloïdes, etc...
Ce problème n'est pas simple et je n'ai pas encore trouvé comment faire avec Asymptote.
Le logiciel de raytring "PovRay" permet de faire apparaître le tracé de l'intersection de deux quadriques, mais je me suis plongé dans Asymptote et j'ai été accroché par cet outil (surtout pour la 3D et les fichiers PDF générés !). D'ailleurs du point de vu code ils se ressemblent un peu (mais étant novice je n'en sais pas plus).
Je souhaiterai savoir si Asymptote permet de faire de tels tracés.
En tout cas, pour d'autre choses, j'ai trouvé pas mal d'idées et de réponses qui m'ont bien permis de progresser avec Asymptote.
Re: Intersections de quadriques...
DK a écrit :Voici ma problématique
Elle est problématique.
Pas de fonction d'intersection de deux surfaces, à ma connaissance, à ce jour.
Donc deux possibilités :
- Essayer de paramétrer la courbe d'intersection ;
- ou décomposer l'une des surfaces en une famille de path3... et chercher l'intersection de ces path3 avec l'autre surface : définir le path3 reliant les triple obtenus et le tracer.
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 !
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 !
Re: Intersections de quadriques...
Bonjour
Je confirme, rien à ce jour. Je pense d'ailleurs que c'est une fonctionnalité très attendue.
Mais ce n'est pas facile à faire.
John y travaillera peut-être l'été prochain. L'été dernier une toute première brique
a été faite, voir splitpatch.asy.
Les personnes volontaires sont bienvenues.
O.G.
Je confirme, rien à ce jour. Je pense d'ailleurs que c'est une fonctionnalité très attendue.
Mais ce n'est pas facile à faire.
John y travaillera peut-être l'été prochain. L'été dernier une toute première brique
a été faite, voir splitpatch.asy.
Les personnes volontaires sont bienvenues.
O.G.
Re: Intersections de quadriques...
Je ne l'avais pas vu passer celui là.OG a écrit :voir splitpatch.asy.
Code : Tout sélectionner
import three;
settings.render=4;
settings.prc=false;
settings.outformat='pdf';
currentprojection=orthographic(camera=(7,-10,7),up=Z);
size(300);
// A structure to subdivide two intersecting patches about their intersection.
struct split
{
surface[] S={new surface};
surface[] T={new surface};
struct tree {
tree[] tree=new tree[2];
}
// Default subdivision depth.
int n=20;
// Subdivide p and q to depth n if they overlap.
void write(tree pt, tree qt, triple[][] p, triple[][] q, int depth=n) {
--depth;
triple[][][] Split(triple[][] P, real u=0)=depth % 2 == 0 ? hsplit : vsplit;
triple[][][] P=Split(p);
triple[][][] Q=Split(q);
for(int i=0; i < 2; ++i) {
triple[][] Pi=P[i];
for(int j=0; j < 2; ++j) {
triple[][] Qj=Q[j];
if(overlap(Pi,Qj)) {
if(!pt.tree.initialized(i))
pt.tree[i]=new tree;
if(!qt.tree.initialized(j))
qt.tree[j]=new tree;
if(depth > 0)
write(pt.tree[i],qt.tree[j],Pi,Qj,depth);
}
}
}
}
// Output the subpatches of p from subdivision.
void read(surface[] S, tree t, triple[][] p, int depth=n) {
--depth;
triple[][][] Split(triple[][] P, real u=0)=depth % 2 == 0 ? hsplit : vsplit;
triple[][][] P=Split(p);
for(int i=0; i < 2; ++i) {
if(t.tree.initialized(i))
read(S,t.tree[i],P[i],depth);
else {
S[0].push(patch(P[i]));
}
}
}
void operator init(triple[][] p, triple[][] q, int depth=n) {
tree ptrunk,qtrunk;
write(ptrunk,qtrunk,p,q,depth);
read(T,ptrunk,p,depth);
read(S,qtrunk,q,depth);
}
}
//currentprojection=orthographic(0,0,1);
triple[][] A={
{(0,0,0),(1,0,0),(1,0,0),(2,0,0)},
{(0,4/3,0),(2/3,4/3,2),(4/3,4/3,2),(2,4/3,0)},
{(0,2/3,0),(2/3,2/3,0),(4/3,2/3,0),(2,2/3,0)},
{(0,2,0),(2/3,2,0),(4/3,2,0),(2,2,0)}
};
triple[][] B={
{(0.5,0,-1),(0.5,1,-1),(0.5,2,-1),(0.5,3,-1)},
{(0.5,0,0),(0.5,1,0),(0.5,2,0),(0.5,3,0)},
{(0.5,0,1),(0.5,1,1),(0.5,2,1),(0.5,3,1)},
{(0.5,0,2),(0.5,1,2),(0.5,2,2),(0.5,3,2)}
};
split S=split(B,A);
defaultrender.merge=true;
for(int i=0; i < S.S[0].s.length; ++i)
draw(surface(S.S[0].s[i]),Pen(i));
for(int i=0; i < S.T[0].s.length; ++i)
draw(surface(S.T[0].s[i]),Pen(i));
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 !
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 !
Re: Intersections de quadriques...
Merci d'avoir regardé le problème et généré un exemple.
Le souhait de tracer de telles intersections vient de la recherche de tracés de cadrans solaires sur des surfaces de révolutions : pour tracer des lignes horaires et des courbes de déclinaison sur la surface du cadran... Le prétexte initial vient en fait de la volonté de tracer des lignes horaires temporaires sur la surface d'un cadran plan (ou autre surface d'ailleurs) : ces lignes d'heures Temporaires sont l'intersection d'une surface hectémoréale (genre de cône ondulé) avec le plan du cadran solaire... (voir T.S. Davies, 1834, Transaction of the Royal Society of Edimburg, Volume 12 ; et aussi W.A. Cadell, 1818, Volume 8, même journal.).
Ce serait assez extraordinaire si cette capacité d'intersection est ajouté à Asymptote. (malheureusement je ne peux pas aider côté programmation.)
D.K.
Le souhait de tracer de telles intersections vient de la recherche de tracés de cadrans solaires sur des surfaces de révolutions : pour tracer des lignes horaires et des courbes de déclinaison sur la surface du cadran... Le prétexte initial vient en fait de la volonté de tracer des lignes horaires temporaires sur la surface d'un cadran plan (ou autre surface d'ailleurs) : ces lignes d'heures Temporaires sont l'intersection d'une surface hectémoréale (genre de cône ondulé) avec le plan du cadran solaire... (voir T.S. Davies, 1834, Transaction of the Royal Society of Edimburg, Volume 12 ; et aussi W.A. Cadell, 1818, Volume 8, même journal.).
Ce serait assez extraordinaire si cette capacité d'intersection est ajouté à Asymptote. (malheureusement je ne peux pas aider côté programmation.)
D.K.
Re: Intersections de quadriques...
DK a écrit :Le souhait de tracer de telles intersections vient de la recherche de tracés de cadrans solaires sur des surfaces de révolutions : pour tracer des lignes horaires et des courbes de déclinaison sur la surface du cadran... Le prétexte initial vient en fait de la volonté de tracer des lignes horaires temporaires sur la surface d'un cadran plan (ou autre surface d'ailleurs) : ces lignes d'heures Temporaires sont l'intersection d'une surface hectémoréale (genre de cône ondulé) avec le plan du cadran solaire...
Serait-il possible de trouver une image sur le net d'un premier exemple simple ?
DK a écrit :(voir T.S. Davies, 1834, Transaction of the Royal Society of Edimburg, Volume 12 ; et aussi W.A. Cadell, 1818, Volume 8, même journal.).
Je viens de feuilleter les 600 pages http://books.google.fr/books?id=I_UQAAAAIAAJ&dq=hect%C3%A9mor%C3%A9ale&source=gbs_navlinks_s
Je n'ai pas tout compris.
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 !
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 !
Re: Intersections de quadriques...
GM a écrit :Je mets l'exemple néanmoins pour pouvoir en parler et demander : à quoi cela sert ?
Une des techniques pour calcul de l'intersection repose sur la subdivision du carreau de Bézier
en petits carreaux, suffisamment petits pour que tu puisses considérer ce petit carreau comme
une surface plane. L'intersection de deux surfaces planes étant facile à faire, y a qu'à !
Le pb est qu'il faut beaucoup de mémoires, regrouper toutes les petites intersections
trouvées en les courbes d'intersection et ne pas se tromper sur ces regroupements car
pour deux surfaces bicubiques l'intersection peut avoir plusieurs composantes connexes
(pas trop non plus).
O.G.
Re: Intersections de quadriques...
GM a écrit :Donc deux possibilités :Je sais... ce n'est pas la réponse espérée.
- Essayer de paramétrer la courbe d'intersection ;
- ou décomposer l'une des surfaces en une famille de path3... et chercher l'intersection de ces path3 avec l'autre surface : définir le path3 reliant les triple obtenus et le tracer.
Un exemple de la deuxième méthode.
Si l'une des surfaces est un plan... on cherche l'intersection de la seconde surface avec un faisceau de droites du plan... et on relie.
Code : Tout sélectionner
size(250);
import three;
currentprojection=orthographic(
camera=(-7,-10,7),up=Z);
currentlight=Viewport;
triple[][] A={
{(0,0,0),(1,0,0),(1,0,0),(2,0,0)},
{(0,4/3,0),(2/3,4/3,2),(4/3,4/3,2),(2,4/3,0)},
{(0,2/3,0),(2/3,2/3,0),(4/3,2/3,0),(2,2/3,0)},
{(0,2,0),(2/3,2,0),(4/3,2,0),(2,2,0)}
};
surface s=surface(patch(A));
draw(s,white);
triple[][] in;
guide3 ch;
int n=25;
for(int i=-1; i<n+2; ++i){
path3 p=(0.5,2*i/n,-1)--(0.5,2*i/n,1);
draw(p,blue);
in.push(intersectionpoints(p,s));
}
for(int i=0; i<in.length; ++i){
if(in[i].length!=0){
ch=ch..in[i][0];
dot(in[i],2bp+green);
}
}
draw(ch,1bp+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 !
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 !
Re: Intersections de quadriques...
Et dans l'autre sens :
Code : Tout sélectionner
size(250);
import three;
currentprojection=orthographic(
camera=(-7,-10,7),up=Z);
currentlight=Viewport;
triple[][] A={
{(0,0,0),(1,0,0),(1,0,0),(2,0,0)},
{(0,4/3,0),(2/3,4/3,2),(4/3,4/3,2),(2,4/3,0)},
{(0,2/3,0),(2/3,2/3,0),(4/3,2/3,0),(2,2/3,0)},
{(0,2,0),(2/3,2,0),(4/3,2,0),(2,2,0)}
};
surface s=surface(patch(A));
draw(s,white);
triple[][] in;
guide3 ch;
int n=25;
for(int i=-1; i<n+2; ++i){
path3 p=(0,2*i/n,.5)--(2,2*i/n,.5);
draw(p,blue);
in.push(intersectionpoints(p,s));
}
for(int i=0; i<in.length; ++i){
if(in[i].length!=0){
ch=ch..in[i][0];
if(in[i].length==2) ch=in[i][1]..ch;
dot(in[i],2bp+green);
}
}
draw(ch,1bp+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 !
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 !
Re: Intersections de quadriques...
Jolies figures.
Si on connaît un peu la forme de l'intersection, comme dans les deux exemples de Gaëtan,
on doit pouvoir à coups de boucle fabriquer un chemin.
O.G.
Si on connaît un peu la forme de l'intersection, comme dans les deux exemples de Gaëtan,
on doit pouvoir à coups de boucle fabriquer un chemin.
O.G.