Page 1 sur 1

[geometry][line] controler la "longueur" des droites affichées

Posté : lun. 25 déc. 2017, 18:24
par malaka
Bonsoir,
J'aimerais que les droites (A'B'), (B'C') ou même (AB) de l'exemple ci-dessous ne dépassent que légèrement des points mais je n'arrive pas à comprendre comment fixer ce paramètre (est-ce possible ?) les options linemargin ou addmargin sont trop "globales".
Par exemple j'aimerais que la droite (B'C') dépasse légèrement du côté de B' sans aller jusqu'au point A.
Merci d'avance.

Figure asymptote 2dfe4f69831bdba864117c5fc8e8b20c
*** 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 geometry;
  2. unitsize(1cm);
  3. //show(currentcoordsys, xpen=invisible);
  4. point O=(0,0);
  5.  
  6. point A=2.5*dir(65), A1=4*dir(65), B=1.5*dir(45), C=3*dir(-15);
  7. //les droites
  8. line OX=line(O,4.5*dir(65));
  9. line OY=line(O,4*dir(45));
  10. line OZ=line(O,5*dir(-15));
  11. line AB=line(A,false,B);
  12. line BC=line(B,false,C);
  13.  
  14. // Les points d'intersection et paralléles
  15. line A1B1=parallel(A1,AB);
  16. point B1=intersectionpoint(A1B1, OY);
  17.  
  18. line B1C1=parallel(B1,BC);
  19. point C1=intersectionpoint(OZ, B1C1);
  20.  
  21.  
  22.  
  23. draw(OX); draw(OZ);draw(OY);
  24. draw(AB,dirB=false);draw(BC);
  25. draw(B1C1);draw(A1B1);
  26. dot("A",A,W); dot("A'",A1,NW); dot("B",B,W);dot("O",O,NW);
  27. dot("B'",B1,E);dot("C",C,NE);dot("C'",C1,NE);

Re: [geometry][line] controler la "longueur" des droites affichées

Posté : lun. 25 déc. 2017, 19:35
par GM
Bonjour,

avec une nouvelle fonction de ce genre (qui serait probablement à améliorer pour la rendre compatible avec des changements de repère que permet geometry) :

Code : Tout sélectionner

void draw(point pA, point pB, real extA=.2, real extB=.2) {
  draw(interp((pair)pA,(pair)pB,-extA)--interp((pair)pB,(pair)pA,-extB));
}
tu peux t'en servir ainsi (cela déborde par défaut de 20% de la longueur du segment) :

Code : Tout sélectionner

draw(A1,B1);
ou (pour des débordements de 10% et 5% de la longueur du segment)

Code : Tout sélectionner

draw(A1,B1,extA=.1,extB=.05);

Figure asymptote 57c20cc36761ac6e916c74ad49de6b41
*** 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 geometry;
  2. unitsize(1cm);
  3. //show(currentcoordsys, xpen=invisible);
  4. point O=(0,0);
  5.  
  6. point A=2.5*dir(65), A1=4*dir(65), B=1.5*dir(45), C=3*dir(-15);
  7. //les droites
  8. line OX=line(O,4.5*dir(65));
  9. line OY=line(O,4*dir(45));
  10. line OZ=line(O,5*dir(-15));
  11. line AB=line(A,false,B);
  12. line BC=line(B,false,C);
  13.  
  14. // Les points d'intersection et paralléles
  15. line A1B1=parallel(A1,AB);
  16. point B1=intersectionpoint(A1B1, OY);
  17.  
  18. line B1C1=parallel(B1,BC);
  19. point C1=intersectionpoint(OZ, B1C1);
  20.  
  21. draw(OX); draw(OZ);draw(OY);
  22. draw(AB,dirB=false);draw(BC);
  23.  
  24. // ============ UNE NOUVELLE FONCTION
  25. void draw(point pA, point pB, real extA=.2, real extB=.2) {
  26. draw(interp((pair)pA,(pair)pB,-extA)--interp((pair)pB,(pair)pA,-extB));
  27. }
  28. // =========== .... et son utilisation :
  29. draw(A1,B1);
  30. draw(B1,C1,extA=.1,extB=.05);
  31. // ======================
  32.  
  33. dot("A",A,W); dot("A'",A1,NW); dot("B",B,W);dot("O",O,NW);
  34. dot("B'",B1,E);dot("C",C,NE);dot("C'",C1,NE);

Re: [geometry][line] controler la "longueur" des droites affichées

Posté : lun. 25 déc. 2017, 23:26
par malaka
Woaw :shock: ! Et tout ça en moins d'une heure. Merci !
Je vais l'utiliser tel quel. On verra bien si j'arrive à comprendre comment elle est conçue. Je débute

Re: [geometry][line] controler la "longueur" des droites affichées

Posté : mar. 26 déc. 2017, 18:18
par GM
malaka a écrit :
lun. 25 déc. 2017, 23:26
Je débute
Je me permets alors de dire qu'il est possible de :
  1. se créer son propre fichier de commandes personnelles : mescommandes.asy ;
  2. de le mettre dans le dossier caché ".asy" du dossier personnel ;
  3. et de mettre dans les scripts "import mescommandes;" pour pouvoir te servir de tes commandes.