Page 1 sur 1

Deux questions

MessagePosté: Mercredi 19 Décembre 2007, 12:36
par rebouxo
Amis du mercredi, bien le bonjour.

Comme annoncé dans le titre j'ai deux questions.
Première question :
le code suivant m'envoie braire et m'insulte copieusement. Et je ne comprend pas pourquoi.

Code: Tout sélectionner
\begin{asy}
import solids ;
import three ;
//import math ;
size(5cm,0) ;
currentprojection=obliqueX;
real h=2 ;
transform3 tT=shift((0,0,-0.25*h));
triple A =(0,0,h) ;
triple B=(h,0,0) ;
triple C=(0,h,0) ;
triple D=(0,0,0) ;
triple I = midpoint(A--C);
triple J = midpoint(A--B);
triple L =midpoint(B--C) ;
triple K=tT*A,
M=intersectionpoint(K--J,D--B);
// Les labels
dot(Label("$A$",align=N),A);
dot(Label("$B$",align=S),B);
dot(Label("$C$",align=S),C);
dot(Label("$D$",align=W),D);
dot(Label("$I$",align=N),I);
dot(Label("$J$",align=W),J);
dot(Label("$K$",align=E),K);
dot(Label("$L$",align=SE),L);
dot(Label("$M$",align=SE),M);
// les segments
draw(A--B--C--cycle3) ;
draw(A--D--C,dashed) ;
draw(D--B,dashed) ;
\end{asy}


Le problème se situe au niveau de l'intersection des droites $(KJ)$ et $(DB)$. Mais Asymptote prétend que ces droites ne sont pas sécantes. Or, elles devraient l'être, nom d'un p'tit Pythagore.
Je suppose que M. Asymptote ne considère que des segments. Donc comment je fais ?

Deuxième question :

Code: Tout sélectionner
\begin{asy}
import solids ;
import three ;
//orthographic((1,0,0),(0,0,1));
currentprojection=obliqueX(45);
size(12cm,0);
guide3 v1=(0,1,0)..(0,0,1)..(0,-1,0)..(0,0,-1)..cycle;
filldraw(v1,mediumgrey);
guide3 v2=(0,0,1)..(0.707,-0.5,0)..(0,0,-1)--cycle;
filldraw(v2,mediumgrey);
guide3 v3=(0,0,1)..(0.707,0.5,0)..(0,0,-1)--cycle;
filldraw(v3,lightgrey);
\end{asy}


Ici, ce n'est pas un problème proprement d'asymptote, mais de représentation dans l'espace. Je fais une représentation d'une sphère : j'ai donc un plan vertical de face et au fond, et je veux deux plans verticaux symétrique par rapport au plan $(Oxz)$. Bon, j'ai l'impression de ne pas mettre planter dans les coordonnées. Mais par contre je galère avec la perspective (je pense). Est-ce que quelqu'un aurait une idée ?

Olivier

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 15:39
par MB
rebouxo a écrit:Le problème se situe au niveau de l'intersection des droites $(KJ)$ et $(DB)$. Mais Asymptote prétend que ces droites ne sont pas sécantes. Or, elles devraient l'être, nom d'un p'tit Pythagore.
Je suppose que M. Asymptote ne considère que des segments. Donc comment je fais ?


Oui, il ne prend en compte que les segments.
Soit tu utilises la structure line (de geometry_dev) soit tu rallonges tes segments à l'aide de interp.

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 16:05
par rebouxo
geometry_dev fonctionne-t-elle en 3D ? parce que il veut pas de mon interception.

Olivier

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 16:14
par MB
rebouxo a écrit:geometry_dev fonctionne-t-elle en 3D ?


Non pas en 3d en effet.

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 16:23
par MB
Avec interp :

Code: Tout sélectionner
M=intersectionpoint(K--interp(K,J,10),D--interp(D,B,10));

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 16:36
par rebouxo
Heee haaaa. Merci, MB. Cela fonctionne.

Euh, on peut le mettre sur le Wiki, avec un ch'ti commentaire au niveau de l'intersection.
Les renseignements sur asymptote, sont comment dire, parcellaire.

Olivier

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 20:01
par Ph. Ivaldi
MB a écrit:Avec interp :
Code: Tout sélectionner
M=intersectionpoint(K--interp(K,J,10),D--interp(D,B,10));

Bip bip !
Puisque le point M est utilisé en tant que pair on peut se permettre un chti
Code: Tout sélectionner
pair M=extension(K,J,D,B);

Pour récupérer « proprement » :roll: un triple il suffit d'injecter le « temps » t de l'intersection de la droite (KJ) avec le plan (BCD) dans interp(K,J,t). Cela donne:
Code: Tout sélectionner
triple M=interp(K,J,intersect(K,J,normal(new triple[]{B,C,D}),D));

Explications:
  • interp marche aussi pour les triples.
  • Dans la documentation de math.asy il y a:
    real intersect(triple P, triple Q, triple n, triple Z)
    Return the intersection time of the extension of the line segment PQ
    with the plane perpendicular to n and passing through Z.
  • Enfin, directement dans le fichier math.asy on peut voir:
    // Compute normal vector to the plane defined by the first 3 elements of p.
    triple normal(triple[] p)
Dans le cas qui nous occupe on aurait pu remplacer normal(new triple[]{B,C,D}) par un simple Z.
Voilà... j'espère ne pas avoir dit de bêtises...

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 20:04
par Ph. Ivaldi
J'ai oublié de préciser import math ;
Bien sûr :)

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 20:16
par Ph. Ivaldi
rebouxo a écrit:Ici, ce n'est pas un problème proprement d'asymptote, mais de représentation dans l'espace. Je fais une représentation d'une sphère : j'ai donc un plan vertical de face et au fond, et je veux deux plans verticaux symétrique par rapport au plan $(Oxz)$. Bon, j'ai l'impression de ne pas mettre planter dans les coordonnées. Mais par contre je galère avec la perspective (je pense). Est-ce que quelqu'un aurait une idée ?

Je ne suis pas sûr d'avoir compris.
Ne voulais-tu pas écrire currentprojection=orthographic((1,0,0),(0,0,1));
au lieux de orthographic((1,0,0),(0,0,1)); ?

Re: [Asymptote] Deux questions sur

MessagePosté: Mercredi 19 Décembre 2007, 20:30
par rebouxo
Bonsoir Philippe,
Pour les intersections dans l'espace, je vais reprendre mon source pour mettre la méthode la plus propre possible. Celle de MB fonctionne bien mais si on peut faire plus simple.
Pour la projection je voudrais que mes deux arcs de cercles soit symétriques une fois projetés. Ils sont symétriques et je voudrais conserver cette symétrie dans la figure en perspective. Je ne sais pas si c'est possible, et je ne maîtrise pas suffisamment les perspectives pour me débrouiller tout seul.

Olivier

Re: [Asymptote] Deux questions sur

MessagePosté: Jeudi 20 Décembre 2007, 01:58
par Ph. Ivaldi
Bonsoir Olivier,
rebouxo a écrit:Pour les intersections dans l'espace,[...] Celle de MB fonctionne bien

Tout à fait ! Je reproche simplement à cette méthode de dépendre d'un paramètre qu'il faut "bien" choisir.
Je suis aussi assez perplexe quant au sens, d'un point de vue informatique, à donner à l'intersection de deux chemins de l'espace...
J'ai le même questionnement dans geometry_dev où il faut parfois décider si la solution d'une équation du 4eme dégré est réelle ou pas.
rebouxo a écrit:Pour la projection je voudrais que mes deux arcs de cercles soit symétriques une fois projetés.

Je procéderais ainsi pour avoir un effet 3D:
Code: Tout sélectionner
size(6cm,0);
import solids;

currentprojection=orthographic((1,0,0),(0,0,1));
currentlight=(1,1,1);
path3 arc=Arc(O,1,90,0,90,180,Y,32);
revolution r=revolution(arc--cycle,Z,30,330);
r.fill(lightgrey);
fill(rotate(-30,Z)*arc--cycle,gray);
fill(rotate(30,Z)*arc--cycle,lightgray);
draw(rotate(30,Z)*arc,grey);
draw(rotate(-30,Z)*arc--cycle,grey);

ou ainsi, sans effet 3D:
Code: Tout sélectionner
size(6cm,0);
import solids;

currentprojection=orthographic((1,0,0),(0,0,1));
currentlight=(1,1,1);
path3 arc=Arc(O,1,90,0,90,180,Y,32)--cycle;
filldraw(rotate(90,Z)*arc,mediumgray);
filldraw(rotate(270,Z)*arc,mediumgray);
fill(rotate(-30,Z)*arc,gray);
fill(rotate(30,Z)*arc,lightgray);
draw(rotate(30,Z)*arc,grey);
draw(rotate(-30,Z)*arc,grey);