Page 1 sur 1

Gestion des couleurs et pointillés avec des intersections de plans

Posté : mar. 29 mars 2016, 22:39
par Nico56
Bonsoir, je voudrais trouver une manière efficace de gérer les couleurs et les pointillés en fonction des arêtes cachées et des parties de plan cachées. Une idée?
Merci d'avance!
Nico

Voici mon code de base, que je voudrais améliorer.

Figure asymptote f017fa4036a25892204cb1d5007e57d7
*** 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.autobillboard=false; // solution temporaire pour que
  2. // l'option d'affichage par défaut des labels ne soit plus Billboard
  3. // (qui ne fonctionne pas pour l'instant avec obliqueX).
  4.  
  5. settings.render=0; // m'a permis d'éliminer des bandes noires apparues avec le shipout
  6. settings.prc=false; // pas d'interactivité
  7.  
  8. size(7.5cm,0);
  9. import three;
  10. settings.tex="pdflatex";
  11.  
  12. currentprojection=obliqueX;
  13. currentlight=nolight;
  14.  
  15. triple v1=(4,0,0),
  16. v2=(0,6,0),
  17. p0=(-2,-3,0);
  18.  
  19. path3 pl1=plane(v1,v2,p0);
  20. path3 pl2=rotate(90,X)*pl1;
  21.  
  22. draw(surface(pl1),paleblue,black);
  23. draw(surface(pl2),palegreen+opacity(.4),black);
  24.  
  25. draw(v2/2+p0--v2/2+v1+p0,.8bp+red+dashed);
  26.  
  27. draw("$\vec{n}$",(-1,0,2)--(-1,1.5,2),Arrow3(2mm));
  28. draw("$\vec{n'}$",(-1,2,0)--(-1,2,2),Arrow3(2mm));
  29. //shipout(bbox(1mm),invisible);

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : mer. 30 mars 2016, 18:27
par GM
Nico56 a écrit :Bonsoir, je voudrais trouver une manière efficace
Une manière oui................. efficace non : une bidouille de professionnel ! :D

Avec ce code, on obtient la figure qui suit.

Code : Tout sélectionner

settings.tex="pdflatex";
settings.outformat="pdf";
settings.batchView=false;
settings.render=4;
settings.prc=false;
         
size(7.5cm,0);
import three;
         
currentprojection=obliqueX;
currentlight=nolight;
         
triple v1=(4,0,0),
       v2=(0,6,0),
       p0=(-2,-3,0);
         
path3 pl1=plane(v1,v2,p0);
path3 pl2=rotate(90,X)*pl1;
         
draw(surface(pl1),paleblue,1bp+black);
draw(surface(pl2),palegreen,1bp+black);
         
draw(v2/2+p0--v2/2+v1+p0,.8bp+red+dashed);
        
draw("$\vec{n}$",(-1,0,2)--(-1,1.5,2),Arrow3(2mm));
draw("$\vec{n'}$",(-1,2,0)--(-1,2,2),Arrow3(2mm));

// Une technique ci-dessous qui peut faire peur...
// ... qui est un fait un leurre (une rustine contre l'incapacité d'Asymptote de dessiner des traits cachés en pointillés).
pair p1=extension(project(point(pl1,0)),project(point(pl1,3)),project(point(pl2,1)),project(point(pl2,2)));
// tp1 est triple du plan contenant pl2, qui se projette sur l'écran en p1.
triple tp1=invert(p1,normal(pl2),point(pl2,0)); 
draw(tp1--point(pl1,3.5),dashed);

pair p2=extension(project(point(pl1,1)),project(point(pl1,2)),project(point(pl2,0)),project(point(pl2,3)));
// tp2 est triple du plan contenant pl1, qui se projette sur l'écran en p2.
triple tp2=invert(p2,normal(pl1),point(pl1,0));
draw(tp2--point(pl1,3.5),dashed);
Mais ce n'est vraiment pas satisfaisant comme méthode !

Image

C'est en faisant tourner la figure dans AdobeReader que l'on comprend ma supercherie :
Image
Mais si tu ne veux qu'une figure statique... cela pourra peut-être convenir.

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : mer. 30 mars 2016, 18:47
par Nico56
Parfait! Jolies projections...
J'ai remarqué que "settings.render=4;" permet de régler mes problèmes de couleurs sur les plans, est-ce qu'il y a une doc sur les différences entre les différents stades?
Merci encore pour l'aide!
Bonne soirée.
Nico

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : mer. 30 mars 2016, 18:59
par GM
Nico56 a écrit :est-ce qu'il y a une doc sur les différences entre les différents stades?
stade ? tu veux dire "étapes de mon bidouillage" ?

Une explication sur les triples qui interviennent :

Image

Et puis il faut comprendre le couple infernal : project(...), invert(...)

Si pA est le triple correspondant à un point dans le repère de l'espace,
project(pA) est le pair correspondant à ce même point dans un repère 2D collé sur l'image.

Si pB est un pair correspondant à un point de l'image dans un repère 2D collé sur l'image,
invert(pB,V,pC) est un triple correspondant à un point de l'espace qui se projette en ce point de l'image : il y en a une infinité dans l'espace mais un seul dans le plan contenant pC et de vecteur normal V.

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : mer. 30 mars 2016, 20:22
par GM
Dans l'exemple, j'ai amélioré les définitions de tp1 et tp2 pour ne pas avoir à réfléchir à un vecteur normal qui convient pour le plan souhaité : il y a une fonction qui le fait pour nous. Elle pourrait être utilisée pour tes vecteurs normaux \vv{n} et \vv{n}'.

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : ven. 1 avr. 2016, 08:06
par Nico56
Super, merci!
Et j'ai vu qu'en réglant "settings.render" sur 1, 2, 3, on a des différences notables de qualité, tu peux m'éclairer?
Merci encore pour le temps consacré à mes réponses!

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : dim. 3 avr. 2016, 21:13
par GM
Nico56 a écrit :Et j'ai vu qu'en réglant "settings.render" sur 1, 2, 3, on a des différences notables de qualité, tu peux m'éclairer ?
Pour les options, voir page 162 et 163 de la doc : http://asymptote.sourceforge.net/asymptote.pdf
Image

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : mer. 6 avr. 2016, 18:54
par Nico56
Je n'avais pas cette doc... Je suis pas doué! J'irai chercher dedans avant de poser certaines questions! ;)
Merci encore.
Nico

Re: Gestion des couleurs et pointillés avec des intersections de plans

Posté : sam. 23 mars 2019, 13:41
par GM
Presque trois ans plus tard...

Après une discussion sur le même thème dans un autre sujet, je propose une variante :

2019-03-23_132827.jpg
2019-03-23_132827.jpg (84.48 Kio) Vu 22386 fois

Code : Tout sélectionner

settings.tex="pdflatex";
settings.outformat="pdf";
settings.render=4;
         
size(7.5cm,0);
import three;
         
currentprojection=obliqueX;
currentlight=nolight;
         
triple v1=(4,0,0),
       v2=(0,6,0),
       p0=(-2,-3,0);
         
path3 pl1=plane(v1,v2,p0);
path3 pl2=rotate(90,X)*pl1;
         
draw(surface(pl1),paleblue+opacity(.5));
draw(surface(pl2),palegreen+opacity(.5));
         
draw(v2/2+p0--v2/2+v1+p0,.8bp+red+dashed);
        
draw("$\vec{n}$",(-1,0,2)--(-1,1.5,2),Arrow3(2mm));
draw("$\vec{n'}$",(-1,2,0)--(-1,2,2),Arrow3(2mm));

// Une technique ci-dessous qui peut faire peur...
// ... qui est un fait un leurre (une rustine contre l'incapacité d'Asymptote de dessiner des traits cachés en pointillés).
pair p1=extension(project(point(pl1,0)),project(point(pl1,3)),project(point(pl2,1)),project(point(pl2,2)));
// tp1 est triple du plan contenant pl1, qui se projette sur l'écran en p1.
triple tp1=invert(p1,normal(pl1),point(pl1,0)); 
draw(tp1--point(pl1,3.5),dotted);
draw(tp1--point(pl1,0)--point(pl1,1)--point(pl1,2)--point(pl1,3)--point(pl1,3.5),1bp+black);


pair p2=extension(project(point(pl1,1)),project(point(pl1,2)),project(point(pl2,0)),project(point(pl2,3)));
// tp2 est triple du plan contenant pl2, qui se projette sur l'écran en p2.
triple tp2=invert(p2,normal(pl2),point(pl2,0));
draw(tp2--point(pl1,3.5),dotted);
draw(tp2--point(pl2,0)--point(pl2,1)--point(pl2,2)--point(pl2,3)--point(pl2,3.5),1bp+black);