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 : 1413
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.48)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.48-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.50-1 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1413
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.48)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.48-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.50-1 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

Répondre