home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #7
/
amigamamagazinepolishissue1998.iso
/
varia
/
povray3
/
povray3_040
/
povscn
/
math
/
helix.pov
< prev
next >
Wrap
Text File
|
1997-12-12
|
3KB
|
142 lines
// Persistence Of Vision raytracer version 2.0 sample file.
// Sample quartic file
// by Alexander Enzmann
#include "shapes.inc"
#include "colors.inc"
#include "textures.inc"
#include "shapesq.inc"
/*
Approximation to the helix z = arctan(y/x).
The helix can be approximated with an algebraic equation (kept to the
range of a quartic) with the following steps:
tan(z) = y/x => sin(z)/cos(z) = y/x =>
(1) x sin(z) - y cos(z) = 0
Using the taylor expansions for sin, cos about z = 0,
sin(z) = z - z^3/3! + z^5/5! - ...
cos(z) = 1 - z^2/2! + z^6/6! - ...
Throwing out the high order terms, the expression (1) can be written as:
x (z - z^3/6) - y (1 + z^2/2) = 0, or
(2) -1/6 x z^3 + x z + 1/2 y z^2 - y = 0
This helix (2) turns 90 degrees in the range 0 <= z <= sqrt(2)/2. By using
scale <2 2 2>, the helix defined below turns 90 degrees in the range
0 <= z <= sqrt(2) = 1.4042.
*/
#declare Red_Helix =
object {
Helix
texture {
pigment { Red }
finish { phong 1.0 }
/* scale <1, 1.4142, 1> */
}
}
#declare Green_Helix =
object {
Helix
texture {
pigment { Green }
finish { phong 1.0 }
/* scale <1, 1.4142, 1> */
}
}
// Glue a bunch of pieces together to make one long helix.
object {
Green_Helix
translate -4.2426*z
rotate 160*z
rotate -90*x
translate <0, -2, 5>
}
object {
Red_Helix
translate -2.8284*z
rotate 70*z
rotate -90*x
translate <0, -2, 5>
}
object {
Green_Helix
translate -1.4142*z
rotate 160*z
rotate -90*x
translate <0, -2, 5>
}
object {
Red_Helix
rotate 70*z
rotate -90*x
translate <0, -2, 5>
}
object {
Green_Helix
translate 1.4142*z
rotate 160*z
rotate -90*x
translate <0, -2, 5>
}
object {
Red_Helix
translate 2.8284*z
rotate 70*z
rotate -90*x
translate <0, -2, 5>
}
object {
Green_Helix
translate 4.2426*z
rotate 160*z
rotate -90*x
translate <0, -2, 5>
}
object {
Red_Helix
translate 5.6569*z
rotate 70*z
rotate -90*x
translate <0, -2, 5>
}
object {
Green_Helix
translate 7.0711*z
rotate 160*z
rotate -90*x
translate <0, -2, 5>
}
camera {
location <0.0, 0.0, -10.0>
direction <0.0, 0.0, 1.0>
up <0.0, 1.0, 0.0>
right <4/3, 0.0, 0.0>
}
// Toss in a couple of light sources.
light_source { <200, 100, -300> colour red 1.0 green 1.0 blue 1.0 }
light_source { <-200, 100, -300> colour red 1.0 green 1.0 blue 1.0 }