Surface et couleurs

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Surface et couleurs

Message 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
Capture.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: surface et couleurs

Message 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 ... 09_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.

maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: surface et couleurs

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf

rebouxo
Modérateur global
Modérateur global
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre

Re: surface et couleurs

Message par rebouxo »

Et en mettant opacity à 0.5 ?

Olivier
A line is a point that went for a walk. Paul Klee.
Par solidarité, pas de MP.

maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: surface et couleurs

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2031
Inscription : lundi 01 octobre 2007, 10:20

Re: surface et couleurs

Message 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 ?

maurice
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 399
Inscription : jeudi 25 mars 2010, 13:49

Re: surface et couleurs

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf