3D gestion de la vue; arête semi visible

Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
Alfred
Messages : 7
Enregistré le : lun. 14 mai 2018, 15:57

3D gestion de la vue; arête semi visible

Message non lu par Alfred » lun. 18 mars 2019, 20:16

J'ai dessiné un bassin sans couvercle. L'arête HD est partiellement cachée par la face BCGF. J'ai calculé le point I à l'aide d'une équation vectorielle. En consultant les exemples, j'ai vu que ce point peut être calculé directement par Asymptote mais le code est opaque. quel qu'un a-t-il une réponse ou une explication ? merci.

Autre question en lien avec ce code: lorsque je place le nom des sommets vers l'est (E), le résultat attendu ne correspond pas à la sortie.

Voici le fichier en question:

Figure asymptote caf77351c6bff6760923ff59b4d720aa
*** 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. settings.outformat="pdf";
  2. settings.prc=false;
  3. settings.render=0;
  4.  
  5. import three;
  6. size(5cm);
  7. currentprojection=orthographic(10,10,3);
  8. currentlight=light(5,10,10);
  9.  
  10. pen l1=linewidth(0.1mm), l2=linewidth(0.2mm),
  11. l3=linewidth(0mm);
  12.  
  13. triple A=(16,0,0), B=(16,6,0), C=(0,6,0), D=(0,0,0), E=(16,0,12), F=(16,11,12), G=(0,11,12), H=(0,0,12),I=(0,0,8.7);
  14.  
  15. //le point I est calculé, dépend de la direction de la projection.
  16. path3[] faces={A--B--C--D--cycle,
  17. E--F--B--A--cycle,
  18. F--G--C--B--cycle,
  19. H--D--C--G--cycle,
  20. H--E--A--D--cycle
  21. };
  22.  
  23. draw(surface(faces),gray(0.8));
  24. draw(A--B--F--E--A^^F--G--C--B^^G--H--E^^I--H,l2);
  25. draw(A--D--C^^D--I,l2+dashed);
  26. dot("$A$", A, W, l3);
  27. dot("$B$", B, S, l3);
  28. dot("$C$", C, SE, l3);
  29. dot("$D$", D, NW, l3);
  30. dot("$E$", E, W, l3);
  31. dot("$F$", F, NNE, l3);
  32. dot("$G$", G, NE, l3);
  33. dot("$H$", H, N, l3);
  34. dot("$I$", I, NW, l3);
  35.  
Alfred

PC Windows 10, MiKTeX 2.9, TeXMaker 5

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1440
Enregistré le : dim. 7 mars 2010, 14:50

Re: 3D gestion de la vue; arête semi visible

Message non lu par GM » mar. 19 mars 2019, 19:44

Bonsoir,

voilà une astuce (qui sera à revoir si on souhaite un changement d'angle de vue tel que, en projection sur le plan de l'image, I ne coinciderait plus avec l'intersection des projetées des droites (FG) et (DH) sur ce même plan) :

Code : Tout sélectionner

pair Ip = extension(project(F),project(G),project(D),project(H));
triple I=invert(Ip,C-D,D);

Figure asymptote 5ea2bd446732da994768bd2048c6f287
*** 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.  
  2. settings.outformat="pdf";
  3. settings.prc=false;
  4. settings.render=0;
  5.  
  6. import three;
  7. size(5cm);
  8. currentprojection=orthographic(5,10,5);
  9. currentlight=light(5,10,5);
  10.  
  11. pen l1=linewidth(0.1mm), l2=linewidth(0.2mm),
  12. l3=linewidth(0mm);
  13.  
  14. triple A=(16,0,0), B=(16,6,0), C=(0,6,0), D=(0,0,0), E=(16,0,12), F=(16,11,12), G=(0,11,12), H=(0,0,12);
  15. pair Ip = extension(project(F),project(G),project(D),project(H));
  16. triple I=invert(Ip,C-D,D);
  17.  
  18. //le point I est calculé, dépend de la direction de la projection.
  19. path3[] faces={A--B--C--D--cycle, E--F--B--A--cycle,
  20. F--G--C--B--cycle, H--D--C--G--cycle,
  21. H--E--A--D--cycle
  22. };
  23.  
  24. draw(surface(faces),gray(0.8));
  25. draw(A--B--F--E--A^^F--G--C--B^^G--H--E^^I--H,l2);
  26. draw(A--D--C^^D--I,l2+dashed);
  27. dot("$A$", A, W, l3);
  28. dot("$B$", B, S, l3);
  29. dot("$C$", C, SE, l3);
  30. dot("$D$", D, NW, l3);
  31. dot("$E$", E, W, l3);
  32. dot("$F$", F, NNE, l3);
  33. dot("$G$", G, NE, l3);
  34. dot("$H$", H, N, l3);
  35. dot("$I$", I, NW, l3);
  36.  

Figure asymptote d0549b22a6d643c2e1f417dad5d6c12c
*** 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.  
  2. settings.outformat="pdf";
  3. settings.prc=false;
  4. settings.render=0;
  5.  
  6. import three;
  7. size(5cm);
  8. currentprojection=orthographic(10,10,3);
  9. currentlight=light(5,10,10);
  10.  
  11. pen l1=linewidth(0.1mm), l2=linewidth(0.2mm),
  12. l3=linewidth(0mm);
  13.  
  14. triple A=(16,0,0), B=(16,6,0), C=(0,6,0), D=(0,0,0), E=(16,0,12), F=(16,11,12), G=(0,11,12), H=(0,0,12);
  15. pair Ip = extension(project(F),project(G),project(D),project(H));
  16. triple I=invert(Ip,C-D,D);
  17.  
  18. //le point I est calculé, dépend de la direction de la projection.
  19. path3[] faces={A--B--C--D--cycle, E--F--B--A--cycle,
  20. F--G--C--B--cycle, H--D--C--G--cycle,
  21. H--E--A--D--cycle
  22. };
  23.  
  24. draw(surface(faces),gray(0.8));
  25. draw(A--B--F--E--A^^F--G--C--B^^G--H--E^^I--H,l2);
  26. draw(A--D--C^^D--I,l2+dashed);
  27. dot("$A$", A, W, l3);
  28. dot("$B$", B, S, l3);
  29. dot("$C$", C, SE, l3);
  30. dot("$D$", D, NW, l3);
  31. dot("$E$", E, W, l3);
  32. dot("$F$", F, NNE, l3);
  33. dot("$G$", G, NE, l3);
  34. dot("$H$", H, N, l3);
  35. dot("$I$", I, NW, l3);
  36.  


Ce n'est pas simple d'expliquer le couple project/invert.
Voir les explications que j'avais données ici : viewtopic.php?f=15&t=398&p=2794&hilit=invert#p2794

Remarque : si on est sûr de ne pas vouloir les points, remplacer

Code : Tout sélectionner

dot("$A$", A, W, l3); 
par

Code : Tout sélectionner

draw("$A$", A, W);.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.66-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.66-? git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1440
Enregistré le : dim. 7 mars 2010, 14:50

Re: 3D gestion de la vue; arête semi visible

Message non lu par GM » mar. 19 mars 2019, 19:48

Dans les prochains jours, je vais déplacer cette demande d'aide dans le forum adéquat si je peux mettre à sa place un exemple (plus simple) qui illustre le rôle des fonctions project et invert pour un tel cas.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.66-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.66-? git) + TexLive2018
Merci de préciser la votre !

Alfred
Messages : 7
Enregistré le : lun. 14 mai 2018, 15:57

Re: 3D gestion de la vue; arête semi visible

Message non lu par Alfred » sam. 23 mars 2019, 10:31

Merci beaucoup ! Je pense avoir ainsi décodé project et invert.
Alfred

PC Windows 10, MiKTeX 2.9, TeXMaker 5

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1440
Enregistré le : dim. 7 mars 2010, 14:50

Re: 3D gestion de la vue; arête semi visible

Message non lu par GM » jeu. 30 juil. 2020, 16:55

Un an plus tard...

cette question a été, de nouveau, posée par quelqu'un d'autre

et il a été suggéré de créer une fonction pointABCD(triple A, triple B, triple C, triple D) qui renvoie le point (triple) de (AB) qui semble (vraiment ou faussement) sur (CD).
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.66)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.66-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.66-? git) + TexLive2018
Merci de préciser la votre !

Répondre