[Three] Invert et project

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

[Three] Invert et project

Message non lu par maurice »

Bonsoir,
je suis confronté à un problème avec invert. Le code :

Code : Tout sélectionner

import three;
currentprojection=orthographic(14,-8.5,2.5);
size(6cm);

triple A=(0.5,0,1),
       B=(0,2,1);
pair pC=(1,1);
path3 pl=plane(A,B,O);
triple n=normal(pl);
transform3 pr=planeproject(Z,O,n);

triple pA=pr*A,
       pB=pr*B,
       C=invert(pC,n,A);

draw(surface(pl),opacity(0.8),yellow+linewidth(1pt));
draw(surface(pA--pr*C--pB--O--cycle),orange);
draw(A--pA,dashed,Arrow3);
draw(B--pB,dashed,Arrow3);
draw(pr*C--C,dashed,Arrow3);

dot("$A$",A,W);
dot("$B$",B,NE);
dot("$(1;1)$",pr*C,S);
dot("$C$",C,N);
dot("$p(A)$",pA,S);
dot("$p(B)$",pB,S);
ne pose pas de problème mais je n'arrive pas à utiliser deux projections distinctes. Ici, le point (1,1) est bien envoyé en C suivant la projection définie (enfin je crois !).
Mais si je définie une deuxième projection par exemple

Code : Tout sélectionner

transform3 pr2=planeproject(Z,O,Z);
je n'arrive pas à utiliser invert avec cette seconde projection...

Peut n'ai-je rien compris mais si quelqu'un a une idée ?...

Merci

Maurice

PS : si quelqu'un a des complément d'information sur project. La doc dit :
A triple or path3 can be projected to a pair or path, with project(triple, projection
P=currentprojection) or project(path3, projection P=currentprojection).
Je suis aussi preneur.

PS2 : le code entre balises ne passe pas alors que ça compile pourtant bien à la maison.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

Es-tu sûr d'avoir compris invert ?

6a0332ce1aa2b7068489c32bf1ebaeb7983ddc60.svg
Les points N, E, S, W sont des points du plan (xOy) de l'espace (de normale (Oz)) tels que dans le plan de projection (écran) leurs coordonnées sont respectivement (0,1), (1,0), (0,-1), (-1,0).

Code : Tout sélectionner

write(pN);
write(pE);
write(pS);
write(pW);
donne :

Code : Tout sélectionner

(-1.91519024327968,-0.383038048655935,0)
(0.331397208533973,1.13917790433553,0)
(1.91519024327968,0.383038048655936,0)
(-0.331397208533973,-1.13917790433553,0)
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

Peut-être que pour l'explication d'invert dans ta doc, ceci sera utile :
221d21dda9410222616dfb6e7dfb2ea884c505cd.svg
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

J'ai oublié de commenter ceci :
maurice a écrit :si quelqu'un a des complément d'information sur project
...
Je suis aussi preneur.
En ayant compris invert, tu devrais avoir maintenant mieux compris ce que la doc dit pour project.

Devine ce que va donner ceci dans mon exemple précédent. ;-)

Code : Tout sélectionner

write(project(pN));
write(project(pE));
write(project(pS));
write(project(pW));
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

Bonjour, désolé pour la réponse tardive mais coupure internet depuis ce matin. Ca vient de revenir.
maurice a écrit :Peut n'ai-je rien compris mais si quelqu'un a une idée ?...
GMaths a écrit :Es-tu sûr d'avoir compris invert ?
On est bien d'accord. Merci pour tes exemples, je vais potasser ça tout à l'heure (du coup je suis parti sur autre chose).
je te tiens au courant en cas de problèmes.

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

Bonsoir, je reviens à la charge.
Je crois que j'ai compris les choses à l'envers. Le code suivant donne :

Code : Tout sélectionner

import graph3;
currentprojection=orthographic(21,-7.5,2.5);
size(6cm);

pair pA=(2.5,0.5);
pair pB=(2,2.5);
pair pC=(1,1);

triple p1=(0.5,0,1),
       p2=(0,2,1);
path3 pl=plane(p1,p2,O);
triple n=normal(pl);
transform3 pr=planeproject(Z,O,n);

transform3 pr2=planeproject(Z,O,Z);

triple A=invert(pA,n,p1),
       B=invert(pB,n,p1),
       C=invert(pC,n,p1);

draw(surface(A--B--C--cycle),
	opacity(0.8),yellow+linewidth(1pt));
draw(pr*A--A,dashed,Arrow3);
draw(pr*B--B,dashed,Arrow3);
draw(pr*C--C,dashed,Arrow3);
dot("$A$",A,N);
dot("$B$",B,N);
dot("$C$",C,N);

draw(pr*A--pr*B--pr*C--cycle,red);

triple A2=invert(pA,Z,(0,0,2)),
       B2=invert(pB,Z,(0,0,2)),
       C2=invert(pC,Z,(0,0,2));

draw(surface(A2--B2--C2--cycle),
	opacity(0.8),yellow+linewidth(1pt));
draw(pr2*A2--A2,dashed,Arrow3);
draw(pr2*B2--B2,dashed,Arrow3);
draw(pr2*C2--C2,dashed,Arrow3);
dot("$A_2$",A2,N);
dot("$B_2$",B2,N);
dot("$C_2$",C2,N);

draw(pr2*A2--pr2*B2--pr2*C2--cycle,red);
J'avais l'intuition (parfois trompeuse) que les projections allait coïncider.
It is occasionally useful to be able to invert a projection, sending a pair z onto the plane
perpendicular to normal and passing through point :
triple invert(pair z, triple normal, triple point,
projection P=currentprojection);
dit la doc officielle.
Où est l'erreur ?
Je ne vois pas de contradiction avec les exemples de Gaétan, on ne peut pas changer de projection ?
et dans project :
A triple or path3 can be projected to a pair or path, with project(triple, projection
P=currentprojection) or project(path3, projection P=currentprojection).
redit la doc officielle et moi je m'interroge !...

est-ce vraiment une projection ? Peut-on définir la direction ? ...

Merci
Maurice

PS : Le code ne passe pas dans les balises asy ; il compile pourtant très bien.

edit : j'ai écrit des bétises ... en allant un peu trop vite : angle de vue trompeur...
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

Bonsoir,

Autant pour moi (ou au temps pour moi comme disent certains), erreur dans les définitions des projections :

Code : Tout sélectionner

import graph3;
currentprojection=orthographic(
camera=(20.4248637375475,-9.74838296644181,1.02595308127841),
up=(-0.000687356698822018,0.00128609021589221,0.025904186472395),
target=(0,1.77635683940025e-15,-4.44089209850063e-16),
zoom=1);
size(6cm);

pair pA=(2.5,0.5);
pair pB=(2,2.5);
pair pC=(1,1);

triple p1=(0.5,0,1),
       p2=(0,2,1);
path3 pl=plane(p1,p2,O);
triple n=normal(pl);
transform3 pr=planeproject(n,O);
transform3 pr2=planeproject(Z,O);

triple A=invert(pA,n,p1),
       B=invert(pB,n,p1),
       C=invert(pC,n,p1);

draw(surface(A--B--C--cycle),
	opacity(0.8),yellow+linewidth(1pt));
draw(pr*A--A,dashed,Arrow3);
draw(pr*B--B,dashed,Arrow3);
draw(pr*C--C,dashed,Arrow3);
dot("$A$",A,N);
dot("$B$",B,N);
dot("$C$",C,N);

draw(pr*A--pr*B--pr*C--cycle,red);

triple A2=invert(pA,Z,(0,0,2)),
       B2=invert(pB,Z,(0,0,2)),
       C2=invert(pC,Z,(0,0,2));

draw(surface(A2--B2--C2--cycle),
	opacity(0.8),yellow+linewidth(1pt));
draw(pr2*A2--A2,dashed,Arrow3);
draw(pr2*B2--B2,dashed,Arrow3);
draw(pr2*C2--C2,dashed,Arrow3);
dot("$A_2$",A2,N);
dot("$B_2$",B2,N);
dot("$C_2$",C2,N);

draw(pr2*A2--pr2*B2--pr2*C2--cycle,red);
Je m'y retrouve mieux.
pardon pour le dérangement

Maurice

PS : mais pourquoi le code ne passe pas entre les balises asy ?
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

Un problème est résolu et un autre suvient :

J'ai le code presque précédent :

Code : Tout sélectionner

import three;
currentprojection=orthographic(
	camera=(69.2603593017276,-25.962413603619,3.08446281490004),
	up=(-0.000694980676261478,0.00123909473034439,0.0260351938620393),
	target=(-1.4210854715202e-14,0,-8.88178419700125e-16),
	zoom=1);
size(6cm);

pair pA=(2.5,0.5);
pair pB=(2,2.5);
pair pC=(1,1);

triple p1=(0.5,0,1),
       p2=(0,2,1);
path3 pl=plane(p1,p2,O);
triple n=normal(pl);
transform3 pr=planeproject(Z,O,n);
transform3 pr2=planeproject(Z,O,Z);

triple A=invert(pA,n,p1),
       B=invert(pB,n,p1),
       C=invert(pC,n,p1);

draw(surface(A--B--C--cycle),
	opacity(0.8),yellow+linewidth(1pt));
draw(pr*A--A,dashed,Arrow3);
draw(pr*B--B,dashed,Arrow3);
draw(pr*C--C,dashed,Arrow3);
dot("$A$",A,N);
dot("$B$",B,N);
dot("$C$",C,N);

draw(pr*A--pr*B--pr*C--cycle,red);

triple A2=invert(pA,Z,(0,0,2)),
       B2=invert(pB,Z,(0,0,2)),
       C2=invert(pC,Z,(0,0,2));

draw(surface(A2--B2--C2--cycle),
	opacity(0.8),yellow+linewidth(1pt));
draw(pr2*A2--A2,dashed,Arrow3);
draw(pr2*B2--B2,dashed,Arrow3);
draw(pr2*C2--C2,dashed,Arrow3);
dot("$A_2$",A2,N);
dot("$B_2$",B2,N);
dot("$C_2$",C2,N);

draw(pr2*A2--pr2*B2--pr2*C2--cycle,red);
Si je fais (c) avec la sortie OpenGL, j'obtiens :

Code : Tout sélectionner

currentprojection=orthographic(
camera=(75.0442469247078,-28.1305179019304,3.34204430131601),
up=(-0.000695015692243039,0.00123915562854716,0.0260364648018259),
target=(-1.4210854715202e-14,0,-4.44089209850063e-16),
zoom=1);
Quelque soient les paramètre de la currentprojection, j'ai le même point de vue (meme si quand j'appuie sur (c), les paramètre changent)...

Encore une erreur de débutant ?

Maurice
Dernière modification par maurice le mardi 04 janvier 2011, 22:56, modifié 1 fois.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

Pas le temps de regarder ton exemple... mais si je comprends : tu souhaiterais dessiner une figure où on verrait deux triangles de l'espace qui aurait le même triangle projeté dans un plan choisi : deux projections de directions différentes ou la même ?

Dans les deux cas, invert ne te permettra pas d'avoir les antécédents (dans un plan choisi) des sommets du triangle projeté.

invert et project sont là pour faire le lien, entre les coordonnées triples d'un point dans l'espace et les coordonnées doubles de la représentation de ce même point sur une feuille ou sur l'écran de ton pc.

invert et project permettent de faire un aller-retour entre des coordonnées différentes d'un seul et unique point, respectivement dans un repère 3D et un repère 2D plaqué (sur la projection qui représente la situation 3D).
Donc, oui, il est question de projection... mais pas de celles qui transformeraient un point de l'espace en un autre point de l'espace.
Dernière modification par GMaths le mardi 04 janvier 2011, 23:57, modifié 1 fois.
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

Tu sembles avoir résolu ton problème, entre temps, ... mais tu pars de trois pair, et pas vraiment d'un triangle projeté défini par trois triple...
donc pour que cela fonctionne avec un triangle projeté défini par trois points choisis de l'espace, repérés par des triplets, il y aurait des choses à revoir.

Je dis tout cela sans pouvoir tester actuellement... donc à considérer avec des réserves... d'autant plus que je n'ai quasiment jamais eu à utiliser invert.
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

Bonsoir, en fait le problème n'est pas résolu (j'ai édité le code précédent).

Mais oui effectivement je souhaitais faire des aller-retour, projeté -- antécédent via invert et les projections.

Disons que ton explication me laisse un peu perplexe : j'ai du mal à saisir le sens de invert et project et des difficultés à en voir l'utilité (sans doute car je n'en ai jamais eu besoin). On dirait un espèce de plongement ...

Dans le code précédent, si on ajoute :

Code : Tout sélectionner

write(pr*A);
write(pr*B);
write(pr*C);
write(pr*A2);
write(pr*B2);
write(pr*C2);
on obtient :

Code : Tout sélectionner

(0.147838228741056,3.06698386064934,0)
(5.58590489819228,3.17128703894872,0)
(2.14204360204859,1.50020304918516,0)
(40.5367266375993,-10.0088926313576,0)
(-4.92935293869363,6.57559496059412,0)
(27.6018900590357,-6.74240576953163,0)
et j'ai effectivement du mal à saisir pourquoi partant dans les deux séries de invert des pairs :

Code : Tout sélectionner

pair pA=(2.5,0.5);
pair pB=(2,2.5);
pair pC=(1,1);
Et avec

Code : Tout sélectionner

write(project(A));
write(project(B));
write(project(C));
write(project(A2));
write(project(B2));
write(project(C2));
on obtient la même chose...

Code : Tout sélectionner

(0.147838228741056,3.06698386064934,0)
(5.58590489819228,3.17128703894872,0)
(2.14204360204859,1.50020304918516,0)
(40.5367266375993,-10.0088926313576,0)
(-4.92935293869363,6.57559496059412,0)
(27.6018900590357,-6.74240576953163,0)
Je suis de plus en plus perplexe...
La nuit porte conseil comme on dit ...

Et toujours ce point de vue qui ne varie pas malgré différentes currentprojection

Maurice

ps : je vais peut-être me contenter de extrude...
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

maurice a écrit :et j'ai effectivement du mal à saisir pourquoi partant dans les deux séries de invert des pairs :

Code : Tout sélectionner

pair pA=(2.5,0.5);
pair pB=(2,2.5);
pair pC=(1,1);
Et avec

Code : Tout sélectionner

write(project(A));
write(project(B));
write(project(C));
write(project(A2));
write(project(B2));
write(project(C2));
on obtient la même chose...
Comme je l'ai dit... je ne peux pas tester actuellement... mais si tu me dis que tu obtiens la même chose, je serais tenté de dire que les deux triangles sont dessinés au même endroit (en pouvant donner l'impression qu'ils seraient éventuellement confondus) lorsque tu lances la visualisation, sans bouger la figure.
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

maurice a écrit :Et toujours ce point de vue qui ne varie pas malgré différentes currentprojection
Je vais finir par écrire des conneries, à force de répondre, sans pouvoir tester ce que je dis...

... mais sur ce coup là, je suis tenté de dire qu'évidemment, cela ne varie pas car, tu as décidé que c'était :

Code : Tout sélectionner

pair pA=(2.5,0.5);
    pair pB=(2,2.5);
    pair pC=(1,1);
Et donc tu peux changer currentprojection si tu veux, la forme des triangles ne changera pas car imagine que ta figure est une figure 2D où le point (0,0,0) de l'espace serait le centre (0,0) du repère 2D collé sur ton écran : tes deux triangles dans ce repère 2D sont toujours définis par les points de coordonnées (2.5,0.5), (2,2.5) et (1,1).
maurice a écrit :PS : mais pourquoi le code ne passe pas entre les balises asy ?
Et si tu supprimes les opacity ? :roll:
Et si tu ajoutes settings.render=0; ? (probablement inutile car probablement systématiquement ajouté par les admin au niveau du php.)
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

GMaths a écrit :... mais si je comprends : tu souhaiterais dessiner une figure où on verrait deux triangles de l'espace qui aurait le même triangle projeté dans un plan choisi : deux projections de directions différentes ou la même ?
J'ai un peu plus de temps pour y réfléchir ... si nécessaire ... et si tu précises ce que tu veux exactement.
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

GMaths a écrit :
GMaths a écrit :... mais si je comprends : tu souhaiterais dessiner une figure où on verrait deux triangles de l'espace qui aurait le même triangle projeté dans un plan choisi : deux projections de directions différentes ou la même ?
J'ai un peu plus de temps pour y réfléchir ... si nécessaire ... et si tu précises ce que tu veux exactement.
Bonjour, je ne veux rien faire de particulier si ce n'est de comprendre la commande invert et la commande project. malgrès mes efforts, je n'y arrive pas.
J'avais commencé par écrire :
9b4e9d5e1a841d68e2c8b7cc184757a83f03dc15.png
où j'avais l'impression que

Code : Tout sélectionner

pair pC=(1,1);
C=invert(pC,n,A);
transform3 pr=planeproject(Z,O,n);
invert et pr étaient inverses l'une de l'autre ; erreur sans doute. Je n'ai pas bien compris la définition de invert et n'en voit pour l'instant pas l'intérêt.
Après j'avais essayé le code du post 1 avec des problèmes.

Un cas où il me semblait interéssant d'utiliser un truc comme project était le code dufil mais cela ne semple pas marcher.

Voila où j'en suis

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

Bon, je retente une explication !

Tu persistes à faire une image avec deux triangles... ce qui montre que tu ne m'as pas bien lu.

J'insiste : invert sert à passer d'un type de coordonnées à un autre type pour un seul et même point de la figure !!

Je pense qu'au départ, invert est une commande interne...
... mais elle peut servir à des problèmes spécifiques :

Exemple : dessiner un triangle dans le plan (xOy) qui donne l'impression d'être équilatéral :
cdd2cd2e779d85f6d40e3581f9b2b0a2552a205b.png
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: [Three] Invert et project

Message non lu par maurice »

Bonsoir,
GMaths a écrit :Bon, je retente une explication !

Tu persistes à faire une image avec deux triangles... ce qui montre que tu ne m'as pas bien lu.
Je ne persiste pas, ce dessin était le premier, je l'ai mis pour expliquer mon cheminement mental
GMaths a écrit :J'insiste : invert sert à passer d'un type de coordonnées à un autre type pour un seul et même point de la figure !!

Je pense qu'au départ, invert est une commande interne...
... mais elle peut servir à des problèmes spécifiques :

Exemple : dessiner un triangle dans le plan (xOy) qui donne l'impression d'être équilatéral :
Je crois bien que je commence à comprendre (il était temps).

Merci Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: [Three] Invert et project

Message non lu par GMaths »

maurice a écrit :ce dessin était le premier
Je parlais bien sûr des codes proposés et donc des figures qu'elles suggéraient. ;-)
maurice a écrit :Je crois bien que je commence à comprendre (il était temps).
Il s'agit donc bien de projection mais de projection d'un point sur l'écran. ;-)
Répondre