home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 14 / CD_ASCQ_14_0694.iso / maj / 4334 / sphere.frl < prev    next >
Text File  |  1994-05-11  |  4KB  |  104 lines

  1. 0:
  2. $ Projection sur une surface:
  3. $ J'explique ici comment transformer un algorithme pour que le nouvel algorithme
  4. $ donne comme image la projection sur une surface de l'image obtenue par l'ancien algorithme.
  5. $ Quel est le calcul effectué:
  6. $       On se place dans l'espace, l'image étant dans le plan nul en z.
  7. $       On se donne une fonction de   D  -> R         où D inclu dans R²
  8. $                                   (x,y) -> f(x,y)
  9. $       et l'on suppose que la surface obtenue par cette fonction est un miroir.
  10. $       La transformation d'algorithme que je vais expliquer consiste à remplacer
  11. $       l'image sur le plan nul en z par son reflet.
  12. $
  13. $ Partout dans les formules de l'algorithme, il faut remplacer z0 par
  14. $
  15. $(
  16. $ max(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))>=0.5),(1-(domaine(x0,y0))))*
  17. $ (spx+i*spy)
  18. $ +
  19. $ min(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))<0.5),(domaine(x0,y0)))*
  20. $ (
  21. $  z0+2*(f(x0,y0))*((f'x(x0,y0))+i*(f'y(x0,y0)))/
  22. $  (
  23. $     rz(  1-2*( (f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0)) )  )
  24. $  )
  25. $ )
  26. $)
  27. $
  28. $puis il faut remplacer:
  29. $       f(x0,y0) par sa valeur sachant que f(.,.) est la fonction donnant
  30. $       la surface.
  31. $       f'x(x0,y0) par sa valeur: c'est la dérivé partielle en x de f, appliqué
  32. $       au point (x0,y0).
  33. $       f'y(x0,y0) par sa valeur: c'est la dérivé partielle en y de f, appliqué
  34. $       au point (x0,y0).
  35. $       domaine(x0,y0) par une fonction qui vaut 1 si f est définie pour (x0,y0)
  36. $       et 0 si f n'est pas définie pour (x0,y0)
  37. $       spx et spy servent quand la lumière reflété n'est pas un point du plan:
  38. $       ils déterminent alors la valeur de remplacement de z0. Si par
  39. $       exemple on veut que la couleur soit celle de fond on remplace spx par
  40. $       10000 et spy par 10000
  41. $
  42. $
  43. $Voici un exemple d'une telle transformation: l'algorithme de base est celle
  44. $de l'image de Mandelbrot, on projette sur une sphère:
  45. $
  46. $c;
  47. $x*x+y*y-nor*nor;
  48. $z*z+
  49. $z0
  50. $;
  51. $
  52. $ce qui donne pour le premier remplacement:
  53. $
  54. $c;
  55. $x*x+y*y-nor*nor;
  56. $z*z+
  57. $(
  58. $ max(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))>=0.5),(1-(domaine(x0,y0))))*
  59. $ (spx+i*spy)
  60. $ +
  61. $ min(((f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0))<0.5),(domaine(x0,y0)))*
  62. $ (
  63. $  z0+2*(f(x0,y0))*((f'x(x0,y0))+i*(f'y(x0,y0)))/
  64. $  (
  65. $     rz(  1-2*( (f'x(x0,y0))*(f'x(x0,y0))+(f'y(x0,y0))*(f'y(x0,y0)) )  )
  66. $  )
  67. $ )
  68. $)
  69. $;
  70. $
  71. $ on prend comme fonction celle qui donne une demi-sphère de centre (v0,v1,v2)
  72. $ et de rayon v3tourné vers le plan
  73. $
  74. $ on met des || pour ne pas provoquer d'erreur de calcul.
  75. $
  76. $ f(x0,y0) = -(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)+v2
  77. $ f'x(x0,y0) = (x0-v0)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)
  78. $ f'y(x0,y0) = (y0-v1)/rz(|v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) )| puir 0.5)
  79. $ domaine(x0,y0) = (v3*v3-( (x0-v0)*(x0-v0)+(y0-v1)*(y0-v1) ))>0
  80. $ on prend spx=spy=10
  81. $
  82. $
  83. $
  84. $et on remplace:
  85.  
  86. c;
  87. x*x+y*y-nor*nor;
  88. z*z+
  89. (
  90.  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)))*
  91.  (10+i*10)
  92.  +
  93.  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))*
  94.  (
  95.   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)))/
  96.   (
  97.       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)) )  )
  98.   )
  99.  )
  100. )
  101. ;
  102.  
  103.  
  104.