Page 1 sur 1

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

Posté : lun. 18 mars 2019, 20:16
par Alfred
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.  

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

Posté : mar. 19 mars 2019, 19:44
par GM
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);.

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

Posté : mar. 19 mars 2019, 19:48
par GM
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.

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

Posté : sam. 23 mars 2019, 10:31
par Alfred
Merci beaucoup ! Je pense avoir ainsi décodé project et invert.

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

Posté : jeu. 30 juil. 2020, 16:55
par GM
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).