Page 1 sur 1

Dégradé de gris sur un solide

Posté : sam. 25 août 2012, 11:24
par Fabrice
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.

Re: Dégradé de gris sur un solide

Posté : sam. 25 août 2012, 14:29
par maurice
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

Re: Dégradé de gris sur un solide

Posté : sam. 25 août 2012, 19:24
par GM
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.

Re: Dégradé de gris sur un solide

Posté : dim. 26 août 2012, 22:09
par maurice
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

Re: Dégradé de gris sur un solide

Posté : lun. 27 août 2012, 07:37
par maurice
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]

Re: Dégradé de gris sur un solide

Posté : lun. 27 août 2012, 08:43
par GM
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.

Re: Dégradé de gris sur un solide

Posté : lun. 27 août 2012, 10:12
par Fabrice
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.