Page 1 sur 1

Surface et couleurs

MessagePosté: Mardi 08 Février 2011, 12:46
par maurice
Bonjour,

Je cherche un moyen de colorer une surface avec plusieurs couleurs. Il y a palette mais le problème est que je n'arrive pas à mettre les couleurs ou je veux;
J'ai bien essayé de construire une palette :

Code: Tout sélectionner
import grid3;
import contour;
import palette;
currentprojection=orthographic(-4,-4,50);
size(10cm);
size3(10cm,10cm,10cm,IgnoreAspect);

limits((0,0,0),(10,12,280));

real f(pair z) {return 2*z.x*(z.y+1);}
surface s=surface(f,(0,0), (10,12), nx=100, ny=100, Spline);
pen[] pal(){
       pen[] Palette;
             Palette=new pen[7];
             Palette[0]=red;
             Palette[1]=green;
             Palette[2]=blue;
             Palette[3]=yellow;
             Palette[4]=gray;
             Palette[5]=orange;
             Palette[6]=Cyan;
       return Palette;
}

draw(s,mean(palette(s.map(zpart),pal())) ,nolight);

real [] lignesdeniveau={40,80,120,160,200,240,280};
draw(lift(f,contour(f,(0,0),(10,12),lignesdeniveau)),1bp+black);

grid3(XYgrid, Step=1);
grid3(YXgrid, Step=1);
grid3(ZXgrid(Relative(1)), Step=20);
grid3(YZgrid(Relative(1)), Step=1);
grid3(XZgrid(Relative(1)), Step=1);
grid3(ZYgrid(Relative(1)), Step=20);

xaxis3(Label("$x$",MidPoint,align=-Z),
Bounds(Both,Min),OutTicks(Step=1,endlabel=false),p=blue);
yaxis3(Label("$y$",MidPoint,align=-Z),
Bounds(Both,Min),OutTicks(Step=2, step=1),p=red);
zaxis3(Label("$z$" ,MidPoint,align=-X),XYEquals(0,12),InTicks(Step=40, step=20),p=1bp+.5green);


Je voudrais que le changement de couleur se produise à chaque ligne de niveau ...

Si quelqu'un a une idée ?

Merci

Maurice.

Capture-1.png
ce que j'obtiens
Capture-1.png (20.9 Kio) Vu 1090 fois


Capture.png
ce que je voudrais

Re: surface et couleurs

MessagePosté: Mardi 08 Février 2011, 13:25
par GMaths
Tu as regardé les exemples ?

Il me semble que tu ne pourras faire guère mieux que dans cet exemple :

http://marris.org/asymptote/Surfaces_3D/index.html#fig_sa12_110109_surface

Je ne pense pas qu'il y ait eu des évolutions depuis qui permettent d'avoir une détection exacte du changement de couleur ; c'est toujours des carreaux que l'on colorie ou pas... donc on augmente n pourqu'ils soient petits et que cela fasse illusion, en mettant un gros trait sur la frontière.

Cela vaudrait le coup de reposer la question sur le forum officiel... pour les encourager à améliorer les choses à ce propos.

Re: surface et couleurs

MessagePosté: Mardi 08 Février 2011, 13:57
par maurice
Bonjour et merci,
avec la ligne :
Code: Tout sélectionner
s.colors(palette(s.map(new real(triple v) {return find(lignesdeniveau > v.z);}),pal()));


j'obtiens la figure ci-contre. Ce qui est étonnant c'est que la couleur pal[0] est utilisée en dernier.
Il me reste à faire apparaitre le quadrillage.

Maurice

Capture-2.png
pas si mal ...
Capture-2.png (32.98 Kio) Vu 1084 fois

Re: surface et couleurs

MessagePosté: Mardi 08 Février 2011, 15:37
par rebouxo
Et en mettant opacity à 0.5 ?

Olivier

Re: surface et couleurs

MessagePosté: Mardi 08 Février 2011, 20:09
par maurice
Bonsoir,

j'ai ajouté les points :

Code: Tout sélectionner
dot("$M$",(8,9,f((8,9))),N);
dot("$P$",(5,11,f((5,11))),N);
dot("$R$",(4,4,f((4,4))),N);


Et deux remarques (questions) me viennent à l'esprit :
1) Pour la position, seule N convient, sinon les labels sont sous la surface et cachés (au moins en partie)
2) UnFill ne travaille pas en 3D ?...

Merci

Maurice

PS : Je m'en vais essayer avec scale3()*unitsphere pour changer les dot
Capture-1.png
P entier R caché
Capture-1.png (21.43 Kio) Vu 1067 fois

Re: surface et couleurs

MessagePosté: Mardi 08 Février 2011, 20:40
par GMaths
1) Pour la position, seule N convient, sinon les labels sont sous la surface et cachés (au moins en partie)


Si tu veux aligner dans l'espace, X, Y, Z peuvent t'être utiles.

Tente ceci :
Code: Tout sélectionner
align=X+Y+Z


2) UnFill ne travaille pas en 3D ?...

sans avoir vérifié : de la 3D avec settings.render=0, si, cela doit fonctionner.

Mais sinon... que voudrais-tu que cela donne en prc ou opengl ?

Re: surface et couleurs

MessagePosté: Mardi 08 Février 2011, 22:56
par maurice
Bonsoir,

GMaths a écrit:
1) Pour la position, seule N convient, sinon les labels sont sous la surface et cachés (au moins en partie)


Si tu veux aligner dans l'espace, X, Y, Z peuvent t'être utiles.

Tente ceci :
Code: Tout sélectionner
align=X+Y+Z


Je vais tenter, merci.

GMaths a écrit:
2) UnFill ne travaille pas en 3D ?...

sans avoir vérifié : de la 3D avec settings.render=0, si, cela doit fonctionner.

Mais sinon... que voudrais-tu que cela donne en prc ou opengl ?


Je cherche juste à imiter la figure du premier post.

J'ai ajouté :

Code: Tout sélectionner
void pointblanc(string s, pair z, real f(pair z)) {
   draw(shift((z.x,z.y,f(z)))*scale(0.15,0.15,4)*unitsphere, white, nolight);
   label(s, (z.x,z.y,f(z)), 2*N);
}

pointblanc("$M$", (8,9), f);
pointblanc("$P$", (5,11), f);
pointblanc("$R$", (4,4), f);


Je pense qu'on peut améliorer tout ça et pouquoi pas de l'automatiser.
Je vais y réfléchir.

Voici ce que j'obtiens en pièce jointe. A comparer avec le modèle ... pas si mal ?

Maurice

Capture-2.png
pas si mal ?
Bac TES spé Asie2004