Page 1 sur 1

Arêtes en pointillés d'un polyèdre

Posté : sam. 27 déc. 2014, 12:27
par Fabrice
Bonjour Gaëtan,
Cela fait un certain déjà que je n'ai plus pratiqué Asymptote, et j'ai donc besoin de ton aide !
Dans le code ci-après, je souhaiterais tracer les arêtes cachées en pointillés (ah, ces règles de perspective !) :

Code : Tout sélectionner

settings.outformat="pdf";
settings.render=32;
settings.prc = false;
size(4cm,0);
import solids;

currentprojection=perspective(10,10,10);


transform3 t=shift(2Z) ;

draw(surface(t*path3(polygon(6))),white+opacity(0.5));
draw(surface(path3(polygon(6))),white+opacity(0.5));
draw(extrude(path3(polygon(6)),2Z),white+opacity(0.5));
Merci,
Fabrice

Re: Arêtes en pointillés d'un polyèdre

Posté : sam. 27 déc. 2014, 16:37
par GM
Bonjour Fabrice,

une réponse rapide depuis un téléphone pour
  • dire que je n'ai pas de pc sous la main pour tester ce que tu proposes ;
  • dire qu'Asymptote n'offre malheureusement toujours pas de facilités pour faire cela ;
  • demander si ta figure se limitera à cela... et demander si elle est destinée à être figée dans un document papier, car il est possible de bricoler quelque chose pour une figure figée particulière mais ne rêve pas d'une commande qui te mettra facilement des pointillés sur toutes tes figures 3D à venir.

Re: Arêtes en pointillés d'un polyèdre

Posté : dim. 28 déc. 2014, 10:18
par Fabrice
Bonjour Gaëtan,
C'est une figure qui doit être incluse dans un document, donc "figée" en quelque sorte.
Je connais un peu les limites d'Asymptote au niveau des arêtes cachées. Je vais préciser ma demande : j'ai tracé la base de mon polyèdre avec :

draw(extrude(path3(polygon(6)),2Z),white+opacity(0.5));

Je cherche à savoir comment récupérer les sommets.
Fabrice

Re: Arêtes en pointillés d'un polyèdre

Posté : dim. 28 déc. 2014, 13:23
par GM
extrude renvoie un objet de type surface, qui possède une méthode "corners()" pour donner les sommets de chaque face sous forme de liste de listes de triple (type triple[][]).

Figure asymptote f86f52799e30f9cdbd1ded9c18ef0208
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. size(6cm,0);
  2. import solids;
  3.  
  4. currentprojection=perspective(10,10,10);
  5.  
  6. transform3 t=shift(2Z) ;
  7.  
  8. path3[] base1=path3(polygon(6)),
  9. base2=t*path3(polygon(6));
  10. surface surfacelaterale=(extrude(path3(polygon(6)),2Z));
  11. triple[][] sommets=surfacelaterale.corners();
  12.  
  13. draw(surface(base1),white+opacity(0.5));
  14. draw(surface(base2),white+opacity(0.5));
  15. draw(surfacelaterale,white+opacity(0.5));
  16.  
  17. draw(sommets[0][0]--sommets[0][1]--sommets[0][2]--sommets[0][3]--cycle
  18. ^^sommets[1][0]--sommets[1][1]--sommets[1][2]--sommets[1][3]
  19. ^^sommets[2][0]--sommets[2][1]--sommets[2][2]--sommets[2][3]
  20. ,red);
  21. draw(sommets[2][2]--sommets[3][2]--sommets[4][2]--sommets[5][2],blue);
  22. draw(sommets[3][0]--sommets[3][1]--sommets[3][2]
  23. ^^sommets[4][0]--sommets[4][1]--sommets[4][2]
  24. ^^sommets[5][0]--sommets[5][1]
  25. ,dashed);
  26.  
  27. pen[] col={blue,red};
  28. for(int k=0; k<sommets.length; ++k)
  29. for(int j=0; j<sommets[k].length; ++j)
  30. label(format("[%i]",k)+format("[%i]",j),sommets[k][j],col[k%2],align=(-1)^(k%2)*Z);


J'ai mis quelques traits en couleur et en pointillés, sans chercher à faire ce que tu voulais exactement : c'est donc à revoir... mais pour t'aider à t'y retrouver dans la numérotation des sommets, je t'ai mis les valeurs des [j] sur la figure.


Rappel : les transparences ne sont pas respectées sur le forum.

Re: Arêtes en pointillés d'un polyèdre

Posté : dim. 28 déc. 2014, 14:01
par GM
J'ai modifié l'exemple précédent pour une numérotation des sommets plus élégante.

Re: Arêtes en pointillés d'un polyèdre

Posté : lun. 29 déc. 2014, 11:06
par Fabrice
Bonjour Gaëtan,
Merci, c'est très clair comme explications. Par contre, je ne connaissais pas la méthode "corners()"(documentation officielle ?).
Fabrice

Re: Arêtes en pointillés d'un polyèdre

Posté : lun. 29 déc. 2014, 16:03
par GM
Fabrice a écrit :Par contre, je ne connaissais pas la méthode "corners()"(documentation officielle ?).
Je ne l'ai pas ouverte.

J'ai fait une recherche dans les *.asy sur "struct surface" pour me souvenir que ce type d'objet est défini dans "tree_surface.asy" (de la ligne 590 à la ligne 837).

Je cherchais pour une instance quelconque surf de type surface les attributs et méthodes possibles.
On y découvre donc
  1. des attributs de l'objet :
    • surf.s de type patch[]
    • surf.index de type int[][]
    • surf.vcyclic de type bool
  2. des méthodes de l'objet :
    • surf.colors(pen[][] palette)
    • surf.corners() de type triple[][]
    • surf.map(real f(triple)) de type real[][]
    • etc, etc,etc.
Ne me demande pas d'expliquer le rôle de chaque attribut ou méthode ! "corners()" m'a semblé clair mais c'est loin d'être le cas de tout le reste. :D

De la même façon, on comprend que surf.s[0] désigne une instance d'objet de type patch
et dans le même fichier, tu as la définition de la structure "patch".
En la lisant, on comprend que :
  • surf.s[0].P correspond à quelque chose de type triple[][]
  • surf.s[0].normals correspond à quelque chose de type triple[]
  • etc, etc, etc.

Re: Arêtes en pointillés d'un polyèdre

Posté : mar. 30 déc. 2014, 22:36
par OG
Bonsoir

Cela date un peu mais il y avait eu des choses sur ce sujet, ici
http://asy.gmaths.net/forum/demandes-d- ... e-t26.html
et là
http://forum.mathematex.net/asymptote-f ... 10244.html

mais je suis bien incapable de remettre le nez dedans aujourd'hui !

Bon réveillon demain

O.G.