À propos d'une routine du module three

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

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.
Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

À propos d'une routine du module three

Message par Fabrice Couvreur »

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.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: À propos d'une routine du module three

Message par GMaths »

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

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: À propos d'une routine du module three

Message par Fabrice Couvreur »

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 :
{}
PS : j'avais encore une petite question sur le précédent fil .

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: À propos d'une routine du module three

Message par Fabrice Couvreur »

J'ai édité mon dernier post afin de donner le code de la figure.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: À propos d'une routine du module three

Message par GMaths »

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
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: À propos d'une routine du module three

Message par GMaths »

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") :
{}

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: À propos d'une routine du module three

Message par Fabrice Couvreur »

Salut,
Approche différente, mais originale !
On s'amuse bien ! :D
Dernière modification par Fabrice Couvreur le mercredi 21 décembre 2011, 17:33, modifié 1 fois.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: À propos d'une routine du module three

Message par GMaths »

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.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: À propos d'une routine du module three

Message par Fabrice Couvreur »

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 ?

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: À propos d'une routine du module three

Message par GMaths »

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 modification par GMaths le mercredi 21 décembre 2011, 18:00, modifié 1 fois.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: À propos d'une routine du module three

Message par Fabrice Couvreur »

Re
C'est très clair !
Merci.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: À propos d'une routine du module three

Message par GMaths »

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[]=...