À propos d'une routine du module three

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

À propos d'une routine du module three

Messagepar Fabrice Couvreur » Mardi 20 Décembre 2011, 22:32

Bonsoir,
Comment utiliser la routine suivante :
Code: Tout sélectionner
path3 path3(path p, triple plane(pair)=XYplane);

Je crois comprendre qu'elle permet de convertir un chemin du plan en un chemin de l'espace. Ce que je ne comprends pas très bien, c'est tous les paramètres de cette routine (triple plane(pair)=XYplane).
Merci.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Publicité

Re: À propos d'une routine du module three

Messagepar GMaths » Mardi 20 Décembre 2011, 23:06

Fabrice Couvreur a écrit:
Code: Tout sélectionner
path3 path3(path p, triple plane(pair)=XYplane);

Je crois comprendre qu'elle permet de convertir un chemin du plan en un chemin de l'espace. Ce que je ne comprends pas très bien, c'est tous les paramètres de cette routine (triple plane(pair)=XYplane).


Tu comprends bien.

Pour le paramètre incompris (qui est en fait une fonction qui, à un "pair", associe un "triple")... il y a des choses prédéfinies :

Code: Tout sélectionner
triple XYplane(pair z) {return (z.x,z.y,0);}
triple YZplane(pair z) {return (0,z.x,z.y);}
triple ZXplane(pair z) {return (z.y,0,z.x);}


... et tu peux en définir d'autres selon ce que tu veux :

Image
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: À propos d'une routine du module three

Messagepar Fabrice Couvreur » Mercredi 21 Décembre 2011, 11:25

Salut Gaëtan,
Merci pour ces explications très claires, je crois avoir compris. J'ai pourtant parcouru la documentation, et je n'ai rien vu de ceci (il était très tard !!):
Code: Tout sélectionner
    triple XYplane(pair z) {return (z.x,z.y,0);}
    triple YZplane(pair z) {return (0,z.x,z.y);}
    triple ZXplane(pair z) {return (z.y,0,z.x);}

J'ai donc mis à profit tes conseils en créant cette modeste figure :

93d2ae0aeba6fa172173f0db3fbd3df9.png

Code: Tout sélectionner
size(5cm,0);
import bsp;
currentprojection=obliqueX;

real u=10;
real a=5*sqrt(2)/2;

path3 plane1=plane((0,u,0),(0,0,u),(0,0,0));
path3 plane2=rotate(-90,(0,u,0),(0,u,u))*plane1;
path3 plane3=rotate(-90,(0,u,u),(0,0,u))*plane1;

triple w (pair z){return (-z.y,u,z.x);};
triple v (pair z){return (-z.x,z.y,u);};

path carre1=shift(2*a*sqrt(2)/2,a*sqrt(2)/2)*rotate(45)*scale(a)*unitsquare;
path carre2=shift((a*sqrt(2),0))*carre1;
path carre3=shift((-a*sqrt(2),0))*carre1;
path carre4=shift((0,a*sqrt(2)))*carre1;
path carre5=shift((0,-a*sqrt(2)))*carre1;

path puzzle[]={carre1,carre2,carre3,carre4,carre5};

path carre=(0,0)--(u,0)--(u,u)--(0,u)--cycle;


face[]faces;
filldraw(faces.push(plane1),project(plane1),white);
filldraw(faces.push(plane2),project(plane2),white);
filldraw(faces.push(plane3),project(plane3),white);
add(faces);

picture pic;
for(int i=0 ; i<puzzle.length ; ++i){
filldraw(pic,project(path3(puzzle[i],YZplane)),gray,invisible);
}

picture pic1;
for(int i=0 ; i<puzzle.length ; ++i){
filldraw(pic1,project(path3(puzzle[i],w)),gray,invisible);
}

picture pic2;
for(int i=0 ; i<puzzle.length ; ++i){
filldraw(pic2,project(path3(puzzle[i],v)),gray,invisible);
}


draw(pic,carre,0.8bp+black);
clip(pic,carre);
add(pic);

draw(pic1,project(path3(carre,w)),0.8bp+black);
clip(pic1,project(path3(carre,w)));
add(pic1);

draw(pic2,project(path3(carre,v)),0.8bp+black);
clip(pic2,project(path3(carre,v)));
add(pic2);


PS : j'avais encore une petite question sur le précédent fil .
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Re: À propos d'une routine du module three

Messagepar Fabrice Couvreur » Mercredi 21 Décembre 2011, 14:38

J'ai édité mon dernier post afin de donner le code de la figure.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Re: À propos d'une routine du module three

Messagepar GMaths » Mercredi 21 Décembre 2011, 14:43

Très jolie figure ! :-)

Fabrice Couvreur a écrit:J'ai édité mon dernier post afin de donner le code de la figure.

... pour que l'on puisse éventuellement en proposer une version plus courte ? :roll: :mrgreen:
Je dis cela sans avoir regardé le code. ;-)
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: À propos d'une routine du module three

Messagepar GMaths » Mercredi 21 Décembre 2011, 15:29

Je suis parti d'une page blanche pour ne pas me laisser influencer par ta méthode... et cela donne ceci :

Code: Tout sélectionner
import three;
currentprojection=obliqueX;
currentlight=nolight;
size(7.5cm);
real a=1;
transform r=rotate(90,(2a,2a));
path p1 = (a,0)--(4a,3a)--(4a,a)--(a,4a)--(3a,4a)--(0,a)--(0,3a)--(3a,0)--cycle,
     penta = (0,0)--(a,0)--(2a,a)--(a,2a)--(0,a)--cycle,
     p2[] = penta ^^ r*penta ^^ r^2*penta ^^ r^3*penta;
transform3 tX=shift(4a*X), tY=shift(4a*Y), tZ=shift(4a*Z);
path3 f1=path3(p1,XYplane), g1[]=path3(p2,XYplane),
      f2=path3(p1,YZplane), g2[]=path3(p2,YZplane),
      f3=path3(p1,ZXplane), g3[]=path3(p2,ZXplane),
      f[]=f1^^f2^^f3^^tZ*f1^^tX*f2^^tY*f3,
      g[]=g1^^g2^^g3^^tZ*g1^^tX*g2^^tY*g3;
draw(surface(f),grey);
draw(surface(g),white);
draw(box((0,0,0),(4a,4a,4a)),1bp+blue);


Penser à changer le "ObliqueX" en, par exemple, "orthographic(5,2,4)" si la figure doit être tournée sous opengl ou dans adobereader... pour que le cube ressemble encore à un cube en le tournant sur lui-même.

----------

Une explication d'une partie du code en image : p1, penta et p2 sont respectivement les trois images suivantes (avec leur version "surface colorée") :

fa4af69e90edac41398bb0ae4f56479c.png

Code: Tout sélectionner
size(10cm);
real a=1;
transform r=rotate(90,(2a,2a));
path p1 = (a,0)--(4a,3a)--(4a,a)--(a,4a)--(3a,4a)--(0,a)--(0,3a)--(3a,0)--cycle,
penta = (0,0)--(a,0)--(2a,a)--(a,2a)--(0,a)--cycle,
p2[] = penta ^^ r*penta ^^ r^2*penta ^^ r^3*penta;
draw(p1^^shift(5a)*penta^^shift(10a)*p2);
fill(shift(0,-5a)*(p1^^shift(5a)*penta^^shift(10a)*p2),gray);
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: À propos d'une routine du module three

Messagepar Fabrice Couvreur » Mercredi 21 Décembre 2011, 17:15

Salut,
Approche différente, mais originale !
On s'amuse bien ! :D
Dernière édition par Fabrice Couvreur le Mercredi 21 Décembre 2011, 17:33, édité 1 fois.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Re: À propos d'une routine du module three

Messagepar GMaths » Mercredi 21 Décembre 2011, 17:33

Fabrice Couvreur a écrit:Approche différente, mais originale !

J'ai jeté un oeil très très rapide à la tienne (il faudra que je regarde cela de plus près plus tard) donc je ne ferai qu'une remarque : ma solution ne pouvait pas ressemblait à la tienne... car je n'utilise bsp que lorsque je suis désespéré de ne pas savoir faire les choses autrement. :mrgreen: Cela correspond à des façons de faire antérieures au grand bouleversement introduit avec Asymptote 1.44.

Fabrice Couvreur a écrit:On s'amuse bien ! :D

De trop même ! Il faudrait que je pense à faire mon travail scolaire.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: À propos d'une routine du module three

Messagepar Fabrice Couvreur » Mercredi 21 Décembre 2011, 17:38

Re,
J'ai analysé ton code, et je ne comprends pas très bien ceci :
Code: Tout sélectionner
 path p2[] = penta ^^ r*penta ^^ r^2*penta ^^ r^3*penta

Ce n'est pas au niveau des transformations, mais plutôt au niveau du type ; c'est un tableau ?
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Re: À propos d'une routine du module three

Messagepar GMaths » Mercredi 21 Décembre 2011, 17:42

Fabrice Couvreur a écrit:J'ai analysé ton code, et je ne comprends pas très bien ceci :
Code: Tout sélectionner
 path p2[] = penta ^^ r*penta ^^ r^2*penta ^^ r^3*penta

Ce n'est pas au niveau des transformations, mais plutôt au niveau du type ; c'est un tableau ?

Enlève les [] et tu devrais avoir un message d'erreur en console qui te dit : "cannot cast 'path[]' to 'path'", ce qui confirme ce que tu as écrit. ;-)

Extrait de la doc Asymptote :
The ^^ binary operator, which requests that the pen be moved (without drawing or affecting endpoint
curvatures) from the final point of the left-hand path to the initial point of the right-hand
path, may be used to group several Asymptote paths into a path[] array (equivalent to a
PostScript path)


--------------

Je viens d'ajouter l'exemple ici, en profitant de l'occasion pour illustrer l'utilisation du paramètre viewportmargin.
Dernière édition par GMaths le Mercredi 21 Décembre 2011, 18:00, édité 1 fois.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: À propos d'une routine du module three

Messagepar Fabrice Couvreur » Mercredi 21 Décembre 2011, 17:58

Re
C'est très clair !
Merci.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Re: À propos d'une routine du module three

Messagepar GMaths » Mercredi 21 Décembre 2011, 18:34

Fabrice Couvreur a écrit:C'est très clair !


Sur le même thème de la place des crochets pour définir un tableau :
je viens d'ouvrir un autre sujet,
où j'ai profité de l'exemple donné pour te montrer que plutôt d'écrire :
Code: Tout sélectionner
real[][] series=...

il peut être plus agréable d'écrire, pour profiter d'un type déjà écrit :
Code: Tout sélectionner
real[] series[]=...
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité