home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 14
/
CD_ASCQ_14_0694.iso
/
maj
/
4334
/
sphere.frl
< prev
next >
Wrap
Text File
|
1994-05-11
|
4KB
|
104 lines
0:
$ Projection sur une surface:
$ J'explique ici comment transformer un algorithme pour que le nouvel algorithme
$ donne comme image la projection sur une surface de l'image obtenue par l'ancien algorithme.
$ Quel est le calcul effectué:
$ On se place dans l'espace, l'image étant dans le plan nul en z.
$ On se donne une fonction de D -> R où D inclu dans R²
$ (x,y) -> f(x,y)
$ et l'on suppose que la surface obtenue par cette fonction est un miroir.
$ La transformation d'algorithme que je vais expliquer consiste à remplacer
$ l'image sur le plan nul en z par son reflet.
$
$ Partout dans les formules de l'algorithme, il faut remplacer z0 par
$
$(
$ max(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))>=0.5),(1-(domaine(x0,y0))))*
$ (spx+i*spy)
$ +
$ min(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))<0.5),(domaine(x0,y0)))*
$ (
$ z0+2*(f(x0,y0))*((f'x(x0,y0))+i*(f'y(x0,y0)))/
$ (
$ rz( 1-2*( (f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0)) ) )
$ )
$ )
$)
$
$puis il faut remplacer:
$ f(x0,y0) par sa valeur sachant que f(.,.) est la fonction donnant
$ la surface.
$ f'x(x0,y0) par sa valeur: c'est la dérivé partielle en x de f, appliqué
$ au point (x0,y0).
$ f'y(x0,y0) par sa valeur: c'est la dérivé partielle en y de f, appliqué
$ au point (x0,y0).
$ domaine(x0,y0) par une fonction qui vaut 1 si f est définie pour (x0,y0)
$ et 0 si f n'est pas définie pour (x0,y0)
$ spx et spy servent quand la lumière reflété n'est pas un point du plan:
$ ils déterminent alors la valeur de remplacement de z0. Si par
$ exemple on veut que la couleur soit celle de fond on remplace spx par
$ 10000 et spy par 10000
$
$
$Voici un exemple d'une telle transformation: l'algorithme de base est celle
$de l'image de Mandelbrot, on projette sur une sphère:
$
$c;
$x*x+y*y-nor*nor;
$z*z+
$z0
$;
$
$ce qui donne pour le premier remplacement:
$
$c;
$x*x+y*y-nor*nor;
$z*z+
$(
$ max(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))>=0.5),(1-(domaine(x0,y0))))*
$ (spx+i*spy)
$ +
$ min(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))<0.5),(domaine(x0,y0)))*
$ (
$ z0+2*(f(x0,y0))*((f'x(x0,y0))+i*(f'y(x0,y0)))/
$ (
$ rz( 1-2*( (f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0)) ) )
$ )
$ )
$)
$;
$
$ on prend comme fonction celle qui donne une demi-sphère de centre (v0,v1,v2)
$ et de rayon v3tourné vers le plan
$
$ on met des || pour ne pas provoquer d'erreur de calcul.
$
$ f(x0,y0) = -(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)+v2
$ f'x(x0,y0) = (x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)
$ f'y(x0,y0) = (y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)
$ domaine(x0,y0) = (v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) ))>0
$ on prend spx=spy=10
$
$
$
$et on remplace:
c;
x*x+y*y-nor*nor;
z*z+
(
max((((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))*((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))+((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))*((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))>=0.5),(1-((v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) ))>0)))*
(10+i*10)
+
min((((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))*((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))+((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))*((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))<0.5),((v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) ))>0))*
(
z0+2*(-(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)+v2)*(((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))+i*((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)))/
(
rz( 1-2*( ((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))*((x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))+((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5))*((y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)) ) )
)
)
)
;