%% 1er essai ou presque, brut de brut
%% transcription de la macro surz proposee par JM Sarlat pour MetaPost
-4 4 setxrange
-4 4 setyrange
0 setlinewidth
%% la source d'eclairage
/xp 3 def
/yp 3 def
/zp 7 def
/kp 8 def
/nx 100 def
/ny 100 def
%% f (x, y) = sin (x^2 + y^2)
/f {
2 copy
0 eq
{
0 eq
{1}
{dup mul exch dup mul add dup Sin exch div}
ifelse
}
{
pop
dup mul exch dup mul add dup Sin exch div
}
ifelse
} def
/vect_I {-.7 -.3} def
/vect_J {1 0} def
/vect_K {0 1} def
%% syntaxe : x y z XYZtoXY --> X Y
/XYZtoXY {
3 dict begin
/z exch def
/y exch def
/x exch def
vect_I x mulv
vect_J y mulv addv
vect_K z mulv addv
end
} def
%% syntaxe : x y (f) diffx
/diffx {
3 dict begin
/la_fonction exch cvx def
/y exch def
/x exch def
x .01 add y la_fonction
x .01 sub y la_fonction sub
.02 div
end
} def
%% syntaxe : x y (f) diffy
/diffy {
3 dict begin
/la_fonction exch cvx def
/y exch def
/x exch def
x y .01 add la_fonction
x y .01 sub la_fonction sub
.02 div
end
} def
%% syntaxe : x y z (f) facteur
/facteur {
4 dict begin
/fonction exch cvx def
/z exch def
/y exch def
/x exch def
/dfx x y (fonction) diffx def
/dfy x y (fonction) diffy def
/ca
zp z sub
yp y sub dfy mul sub
xp x sub dfx mul sub
def
/cb
dfx dup mul
dfy dup mul add
1 add
sqrt
def
/cc
z zp sub dup mul
y yp sub dup mul add
x xp sub dup mul add
sqrt
def
kp ca mul
cc dup dup mul mul cb mul div
end
} def
/dx
xmax xmin sub nx div
def
/dy
ymax ymin sub ny div
def
/fillstyle {
[ 1 .65 0 ] {kp coeff_couleur abs mul mul} apply
aload pop setrgbcolor
% setgray
fill
} def
/i 0 def
nx 1 sub {
/xt xmin i dx mul add def
/xt+1 xt dx add def
/j 0 def
ny 1 sub {
/yt ymin j dy mul add def
/yt+1 yt dy add def
/coeff_couleur xt yt 2 copy f (f) facteur def
xt yt 2 copy f XYZtoXY /A0 defpoint
xt yt+1 2 copy f XYZtoXY /A1 defpoint
xt+1 yt+1 2 copy f XYZtoXY /A2 defpoint
xt+1 yt 2 copy f XYZtoXY /A3 defpoint
gsave
[A0 A1 A2 A3 A0] polygone*
grestore
/j j 1 add store
} repeat
/i i 1 add store
} repeat
|