Dégradé de gris sur un solide

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 !
Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Dégradé de gris sur un solide

Message non lu par Fabrice » sam. 25 août 2012, 11:24

Bonjour Gaëtan,
L'idée est de produire une image au format eps contenant en parallèle ceci :

Figure asymptote dd0d724bc1abd2e5982716bebf3da121
*** 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(1.5cm,1.5cm);
  3. pen[][] pencil={{darkgray},{lightgray}};
  4. pair z0=(0,0), z1=(4,0), z2=(4,2.8), z3=(0,2.8);
  5. pair z4=(0.4,0.4), z5=scale(-1,midpoint(z0--z2))*z4;
  6. pair z6=(3.6,0.4), z7=scale(-1,midpoint(z0--z2))*z6;
  7. path g= z0--z1--z2--z3--cycle;
  8. latticeshade(g,pencil);
  9. draw(z4--z6--z5--z7--cycle,linetype("8 8"));
  10. perpendicular(z0,NE,size=0.6cm);
  11. perpendicular(z1,NW,size=0.6cm);
  12. perpendicular(z2,SW,size=0.6cm);
  13. perpendicular(z3,SE,size=0.6cm);
  14. draw(g);


et ceci :

Figure asymptote 59152cdbce456a71a5d5873299038830
*** 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. size(8cm,0);
  3. currentprojection=orthographic(
  4. camera=(9.08673998275873,6.16333456208824,2.91627663935377),
  5. up=(-0.00593722219330837,-0.00224728622720572,0.023249108292899),
  6. target=(1.77635683940025e-15,1.77635683940025e-15,-4.44089209850063e-16),
  7. zoom=0.427864442564362);
  8. triple Z0=(0,0,0), Z1=(4,0,0), Z2=(4,4,0), Z3=(0,4,0);
  9. path3 p1=Z0--Z1--Z2--Z3--cycle;
  10. transform3 t1=shift(0.4*Z);
  11. transform3 t2=shift(4*Y);
  12. transform3 t3=shift(4*X);
  13. path3 p2=Z0--t1*Z0--t1*Z1--Z1--cycle;
  14. path3 p3=Z0--t1*Z0--t1*Z3--Z3--cycle;
  15. pair z1=extension(project(Z0),project(Z3),project(t1*Z2),project(t1*Z3));
  16. pair z2=extension(project(Z0),project(Z1),project(t1*Z1),project(t1*Z2));
  17. triple Z4=invert(z1,Z,O);
  18. triple Z5=invert(z2,Z,O);
  19. draw(surface(p1),lightgray,black);
  20. draw(surface(p2),lightgray,black);
  21. draw(surface(p3),lightgray,black);
  22. draw(surface(t2*p2),opacity(0.4)+lightgray,black);
  23. draw(surface(t3*p3),opacity(0.4)+lightgray,black);
  24. draw(t1*p1^^Z1--Z2--t1*Z2--t1*Z1--cycle^^Z2--Z3--t1*Z3--t1*Z2--cycle);
  25. draw(t1*Z0--Z0--Z5^^Z0--Z4);
  26. draw(Z5--Z1^^Z4--Z3,dashed);


Tout d'abord une première question : dans le premier code, au départ, unitsize était de 1 cm et size, dans la routine perpendicular, de 0.4 cm. J'ai mis unitsize à 1.5 cm, mais cela n'a pas affecté le size de perpendicular qui est resté à 0.4 cm. Il m'a donc fallu affecter à size 0.4 x 1.5 cm =0.8 cm. Pourquoi ?

Deuxième question concernant le deuxième code : je souhaiterais obtenir, si possible, un dégradé de gris sur les faces de la boîte, comme sur la plaque d'aluminium.
Je trouve aussi que la sortie au format eps est de qualité moyenne.
Merci.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Dégradé de gris sur un solide

Message non lu par maurice » sam. 25 août 2012, 14:29

Fabrice a écrit :Bonjour Gaëtan,


Bonjour,

Fabrice a écrit :Tout d'abord une première question : dans le premier code, au départ, unitsize était de 1 cm et size, dans la routine perpendicular, de 0.4 cm. J'ai mis unitsize à 1.5 cm, mais cela n'a pas affecté le size de perpendicular qui est resté à 0.4 cm. Il m'a donc fallu affecter à size 0.4 x 1.5 cm =0.8 cm. Pourquoi ?

Si tu mets 0,4cm pour perpendicular, c'est une dimension absolue pas relative, elle ne dépend pas de unisize.
Peut-êtyre y-a-t-il une solution pour mettre une dimension relative, je ne connais pas.
Gaétan pourra peut-être répondre.

Fabrice a écrit :Deuxième question concernant le deuxième code : je souhaiterais obtenir, si possible, un dégradé de gris sur les faces de la boîte, comme sur la plaque d'aluminium.


J'ai essayé de bidouiller un truc avec

Code : Tout sélectionner

pen[] pens=mean(palette(s.map(ypart), Grayscale()));

sans succés.

Je dois bouger, je reviens à la charge ce soir, à moins qu'une solution n'ait déjà été trouvée.

Bruno
Modifié en dernier par maurice le lun. 27 août 2012, 21:40, modifié 1 fois.
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Dégradé de gris sur un solide

Message non lu par GM » sam. 25 août 2012, 19:24

maurice a écrit :Si tu mets 0,4cm pour perpendicular, c'est une dimension absolue pas relative, elle ne dépend pas de unitsize.


Preuve par l'image :

Figure asymptote 32155590af67821c975d2cdc69b66a75
*** 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. unitsize(1cm);
  2. import geometry;
  3. draw(unitsquare);
  4. perpendicular((0,0),NE,size=0.4cm);

Figure asymptote 01483c014f0535899f02594fe1921f47
*** 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. unitsize(4cm);
  2. import geometry;
  3. draw(unitsquare);
  4. perpendicular((0,0),NE,size=0.4cm);


---------------------------------------------------

Je suis reparti d'une feuille blanche... pour m'apercevoir au bout du compte que je n'avais pas besoin des spécificités de geometry.
Il y a bien sûr plusieurs autres méthodes possibles.

Figure asymptote 88b97a4fabf1ad72d759d3cf09bf8af3
*** 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. unitsize(1.5cm);
  2. pen[][] pencil={{darkgray},{lightgray}};
  3. real L=4, l=2.8, m=.4;
  4. transform tL=shift(L,0), tl=shift(0,l), r=rotate(90);
  5. path pext=box((0,0),(L,l)),
  6. pint=box((m,m),(L-m,l-m)),
  7. ad=(m,0)--(m,m)--(0,m); // un angle droit dont on va déduire les trois autres.
  8. latticeshade(pext,pencil);
  9. draw(pext);
  10. draw(pint,linetype("8 8"));
  11. draw(ad^^tL*r*ad^^tl*tL*r^2*ad^^tl*r^3*ad); // pour les trois angles droits à déduire de ad :
  12. // je tourne de 1, 2 ou 3 quarts de tours directs par rapport à (0,0)
  13. // et on translate avec tL et/ou tl.


----------------------------

Pour la deuxième question... j'y réfléchirai aussi plus tard car j'ai de la visite.
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 !

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Dégradé de gris sur un solide

Message non lu par maurice » dim. 26 août 2012, 22:09

Bonsoir,

en attendant mieux ...

Figure asymptote 3cea5e2fcb528b25ea544d383cd4c754
*** 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 graph3;
  2. import palette;
  3. size(8cm,0);
  4. currentprojection=orthographic(
  5. camera=(9.08673998275873,6.16333456208824,2.91627663935377),
  6. up=(-0.00593722219330837,-0.00224728622720572,0.023249108292899),
  7. target=(1.77635683940025e-15,1.77635683940025e-15,-4.44089209850063e-16),
  8. zoom=0.427864442564362);
  9. triple Z0=(0,0,0), Z1=(4,0,0), Z2=(4,4,0), Z3=(0,4,0);
  10. path3 p1=Z0--Z1--Z2--Z3--cycle;
  11. transform3 t1=shift(0.4*Z);
  12. transform3 t2=shift(4*Y);
  13. transform3 t3=shift(4*X);
  14. path3 p2=Z0--t1*Z0--t1*Z1--Z1--cycle;
  15. path3 p3=Z0--t1*Z0--t1*Z3--Z3--cycle;
  16. pair z1=extension(project(Z0),project(Z3),project(t1*Z2),project(t1*Z3));
  17. pair z2=extension(project(Z0),project(Z1),project(t1*Z1),project(t1*Z2));
  18. triple Z4=invert(z1,Z,O);
  19. triple Z5=invert(z2,Z,O);
  20.  
  21. triple f1(pair t) {
  22. return (4*t.x, 4*t.y, 0);
  23. }
  24. surface s1=surface(f1, (0,0), (1,1), 40, 40);
  25. pen[] pen1=mean(palette(s1.map(xpart), Grayscale()));
  26. draw(s1, pen1);
  27.  
  28. triple f2(pair t) {
  29. return (4*t.x, 0, 0.4*t.y);
  30. }
  31. surface s2=surface(f2, (0,0), (1,1), 40, 40);
  32. pen[] pen2=mean(palette(s2.map(xpart), Grayscale()));
  33. draw(s2, pen2);
  34.  
  35. // draw(surface(p1),pens,black);
  36. // draw(surface(p2),lightgray,black);
  37. draw(surface(p3),black,black);
  38. // draw(surface(t2*p2),opacity(0.4)+lightgray,black);
  39. draw(surface(t3*p3),opacity(0.4)+lightgray,black);
  40. draw(t1*p1^^Z1--Z2--t1*Z2--t1*Z1--cycle^^Z2--Z3--t1*Z3--t1*Z2--cycle);
  41. draw(t1*Z0--Z0--Z5^^Z0--Z4);
  42. draw(Z5--Z1^^Z4--Z3,dashed);
  43.  
  44. draw(t2*s2, pen2);


Bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Dégradé de gris sur un solide

Message non lu par maurice » lun. 27 août 2012, 07:37

Le même avec un pinceau invisible sur la face de devant...

Figure asymptote 0483ea304d26258dfb3120f3268149b9
*** 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 graph3;
  2. import palette;
  3. size(8cm,0);
  4. currentprojection=orthographic(
  5. camera=(9.08673998275873,6.16333456208824,2.91627663935377),
  6. up=(-0.00593722219330837,-0.00224728622720572,0.023249108292899),
  7. target=(1.77635683940025e-15,1.77635683940025e-15,-4.44089209850063e-16),
  8. zoom=0.427864442564362);
  9. triple Z0=(0,0,0), Z1=(4,0,0), Z2=(4,4,0), Z3=(0,4,0);
  10. path3 p1=Z0--Z1--Z2--Z3--cycle;
  11. transform3 t1=shift(0.4*Z);
  12. transform3 t2=shift(4*Y);
  13. transform3 t3=shift(4*X);
  14. path3 p2=Z0--t1*Z0--t1*Z1--Z1--cycle;
  15. path3 p3=Z0--t1*Z0--t1*Z3--Z3--cycle;
  16. pair z1=extension(project(Z0),project(Z3),project(t1*Z2),project(t1*Z3));
  17. pair z2=extension(project(Z0),project(Z1),project(t1*Z1),project(t1*Z2));
  18. triple Z4=invert(z1,Z,O);
  19. triple Z5=invert(z2,Z,O);
  20.  
  21. triple f1(pair t) {
  22. return (4*t.x, 4*t.y, 0);
  23. }
  24. surface s1=surface(f1, (0,0), (1,1), 40, 40);
  25. pen[] pen1=mean(palette(s1.map(xpart), Grayscale()));
  26. draw(s1, pen1);
  27.  
  28. triple f2(pair t) {
  29. return (4*t.x, 0, 0.4*t.y);
  30. }
  31. surface s2=surface(f2, (0,0), (1,1), 40, 40);
  32. pen[] pen2=mean(palette(s2.map(xpart), Grayscale()));
  33. draw(s2, pen2);
  34.  
  35. // draw(surface(p1),pens,black);
  36. // draw(surface(p2),lightgray,black);
  37. draw(surface(p3),black,black);
  38. // draw(surface(t2*p2),opacity(0.4)+lightgray,black);
  39. draw(surface(t3*p3),invisible,black);
  40. draw(t1*p1^^Z1--Z2--t1*Z2--t1*Z1--cycle^^Z2--Z3--t1*Z3--t1*Z2--cycle);
  41. draw(t1*Z0--Z0--Z5^^Z0--Z4);
  42. draw(Z5--Z1^^Z4--Z3,dashed);
  43.  
  44. draw(t2*s2, pen2);


Bruno[/quote]
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Dégradé de gris sur un solide

Message non lu par GM » lun. 27 août 2012, 08:43

Tout d'abord, bravo à Maurice qui s'est attaqué à la question difficile.

Fabrice a écrit :je souhaiterais obtenir, si possible, un dégradé de gris sur les faces de la boîte, comme sur la plaque d'aluminium.


Si c'est un effet d'aluminium que l'on recherche... je trouve déjà que le gris initial (du premier message) n'est pas adapté : c'est trop gris... et avec un dégradé trop prononcé.


Des images d'objets en alu :http://www.google.fr/search?q=plaque+aluminium&um=1&ie=UTF-8&hl=fr&tbm=isch&source=og&sa=N&tab=wi

Et pour une vue 3D d'une telle plaque... une légère lumière sur du gris doit être suffisant... car le dégradé sur de l'alu, on le doit à l'éclairage, non ? Ajouter un fort dégradé ne donne pas l'impression d'alu pour moi.

Dans la réalité, on peut avoir cela :
Image

mais cela peut ressembler à cela aussi :
Image


Le choix précis de la couleur grise n'est-il pas plus important que le dégradé pour donner l'impression d'alu ? En tout cas, la deuxième figure montre que le dégradé peut être léger.

Rêvons de pouvoir ajouter des textures un jour.
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 !

Fabrice
Messages : 118
Enregistré le : sam. 13 mars 2010, 11:41

Re: Dégradé de gris sur un solide

Message non lu par Fabrice » lun. 27 août 2012, 10:12

Bonjour,
Désolé de ne répondre que maintenant.
GM a écrit :Tout d'abord, bravo à Maurice qui s'est attaqué à la question difficile.

Tout à fait d'accord.
GM a écrit :Si c'est un effet d'aluminium que l'on recherche... je trouve déjà que le gris initial (du premier message) n'est pas adapté : c'est trop gris... et avec un dégradé trop prononcé.

Je trouve aussi, mais l'idée de départ était surtout de voir comment on pouvait améliorer le rendu (image vue dans un livre scolaire avec un dégradé aussi prononcé, ce qui ne voulait pas dire que j'adhérais, mais je me suis contenté de reproduire à peu près la figure).
Merci de vous être penché sur ma question.
Debian Strech + Asymptote 2.42-12 + Emacs24 + TeXLive 2017

Répondre