Gestion des pointillés dans une figure 3D

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
Viserion
Messages : 28
Enregistré le : mar. 24 mars 2020, 20:00

Gestion des pointillés dans une figure 3D

Message non lu par Viserion » jeu. 30 juil. 2020, 12:05

Bonjour,
Je pense que cette question a été abordée plusieurs fois mais ...
Dans le code ci-après, les droites (IJ) et (KI) doivent avoir une partie en traits pointillés : possible ou pas possible avec le module three ?
Comment "étendre" le segment [EF] pour plutôt avoir une "droite" ?
Merci.
Fabrice

Code : Tout sélectionner

import three;
import math;

size(5cm,0);
currentprojection=obliqueX;

defaultpen(fontsize(9pt));

triple A = (0,0,0), B = (0,4,0), C = (3,4,0), D = (-4,0,2);
triple I = interp(A,B,2/3);
triple J = interp(A,C,1/4);
triple K = interp(A,D,1/3);
triple F = interp(K,I,intersect(K,I,normal(new triple[]{B,C,D}),D));
triple Ep = interp(J,I,intersect(J,I,normal(new triple[]{B,C,D}),D));

draw(K--J,red);
draw(D--A--C--B--D--C);
draw(A--B,linetype("8 8"));
draw(K--F);
draw(J--Ep);
draw(Ep--F,heavygreen);

dot("$A$", A, blue, align=W);  dot("$B$", B, blue, align=S+E);
dot("$C$", C, blue, align=S);  dot("$D$", D, align=N);
dot("$K$", K, red, align=W+N);  dot("$J$", J, red, align=S);
dot("$I$", I, blue, align=N); dot("$F$", F, align=N+E);
dot("$E$", Ep, align=N);

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

Re: Gestion des pointillés dans une figure 3D

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

Bonjour Fabrice,

avant de répondre à une question, j'essaie d'abord de comprendre ce qui m'est proposé.

J'ai donc essayé de comprendre ceci :

Code : Tout sélectionner

triple F = interp(K,I,intersect(K,I,normal(new triple[]{B,C,D}),D));
triple Ep = interp(J,I,intersect(J,I,normal(new triple[]{B,C,D}),D));
mais cela n'a pas été aussi immédiat que si tu m'avais proposé ce qui suit... et qui me semble plus simple à comprendre.

Code : Tout sélectionner

triple F = planeproject(B--C--D,K-I)*I; // projeté de I sur (BCD) parallèlement à (IK)
triple Ep = planeproject(B--C--D,J-I)*I; // projeté de I sur (BCD) parallèlement à (IJ)
Pour la question d'un segment dont une partie est cachée, voir du côté de project et invert : viewtopic.php?f=9&t=453.

Pour le prolongement d'un segment, tu peux utiliser interp avec un coefficient négatif (ou plus grand que 1) :

Code : Tout sélectionner

draw(interp(Ep,F,-0.2)--interp(Ep,F,1.2),heavygreen);
Si tu aspires à une réponse avec le code complet, tu devras attendre ce soir car je drois reprendre des travaux en cours avec un ami.
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

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

Re: Gestion des pointillés dans une figure 3D

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

(suite)

Cela peut donner cela, avec peut-être l'occasion de définir (dans un ficher de configuration personnel) une fonction pointABCD telle que je l'ai définie dans le code ci-dessous.

Figure asymptote 55d75c687eee8d1f416040bd4f9f87b3
*** 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. import three;
  2. import math;
  3.  
  4. size(5cm,0);
  5. currentprojection=obliqueX;
  6.  
  7. defaultpen(fontsize(9pt));
  8. pen style1 = linetype("4 4");
  9.  
  10. // Fonction qui renvoie le point (triple) de (AB) qui semble (vraiment ou faussement) sur (CD)
  11. triple pointABCD(triple A, triple B, triple C, triple D) {
  12. pair Xp = extension(project(A),project(B),project(C),project(D));
  13. return invert(Xp,A,B);
  14. }
  15.  
  16. triple A = (0,0,0), B = (0,4,0), C = (3,4,0), D = (-4,0,2);
  17. triple I = interp(A,B,2/3);
  18. triple J = interp(A,C,1/4);
  19. triple K = interp(A,D,1/3);
  20. triple F = planeproject(B--C--D,K-I)*I; // projeté de I sur (BCD) parallèlement à (IK)
  21. triple Ep = planeproject(B--C--D,J-I)*I; // projeté de I sur (BCD) parallèlement à (IJ)
  22. triple I1=pointABCD(K,I,B,C); // point de (KI) qui semble sur (BC) sans l'être
  23. triple I2=pointABCD(J,I,B,D); // point de (JI) qui semble sur (BD) sans l'être
  24.  
  25. draw(K--J,red);
  26. draw(D--A--C--B--D--C);
  27. draw(A--B,style1);
  28. draw(K--I1,style1);draw(I1--F);
  29. draw(J--I2,style1);draw(I2--Ep);
  30. draw(interp(Ep,F,-0.2)--interp(Ep,F,1.2),heavygreen);
  31.  
  32. dot("$A$", A, blue, align=W); dot("$B$", B, blue, align=SE);
  33. dot("$C$", C, blue, align=S); dot("$D$", D, align=N);
  34. dot("$K$", K, red, align=NW); dot("$J$", J, red, align=SW);
  35. dot("$I$", I, blue, align=N); dot("$F$", F, align=N+E);
  36. dot("$E$", Ep, align=NE);
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Viserion
Messages : 28
Enregistré le : mar. 24 mars 2020, 20:00

Re: Gestion des pointillés dans une figure 3D

Message non lu par Viserion » ven. 31 juil. 2020, 14:07

Bonjour Gaëtan;
Désolé pour la réponse tardive mais je pensais qu'il y avait une notification de réponse (comme auparavant, il me semble).
J'ai un peu délaissé Asymptote au profit de Metapost et TikZ, mais pour les dessins en "3 D", c'est mieux ...
J'ai donc fouillé dans la documentation officielle et la routine

Code : Tout sélectionner

triple F = interp(K, I, intersect(K, I, normal(new triple[]{B, C, D}), D));
m'a semblé la plus appropriée mais ta façon de faire est plus facile à comprendre, c’est vrai.
Merci beaucoup pour ton aide car Asymptote reste un outil très puissant et pas facile à maîtriser. J'ai encore une petite question : peut-on remplacer les points par des croix ?
Fabrice
Modifier | Retour | Copier

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

Re: Gestion des pointillés dans une figure 3D

Message non lu par GM » ven. 31 juil. 2020, 20:51

Bonsoir,
Viserion a écrit :
ven. 31 juil. 2020, 14:07
Désolé pour la réponse tardive mais je pensais qu'il y avait une notification de réponse (comme auparavant, il me semble).
il y en avait et j'espère que la mise à jour du serveur (qui n'a pas été simple) n'a pas cassé certaines choses.

A voir aussi, s'il n'y a pas un paramètre mal réglé dans ton profil depuis que tu as recréé un compte.
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre