|
|
Hans de Vries wrote:
>
> The simplest version for the time being below. It speeds things up with
> circa 25%
> The trick is to get the right ranges for theta (-pi..+pi) and phi
> (-pi/2..+pi/2)
> and avoiding divides by zero.
Often it will also help to "predeclare" constants so that they
don't have to be evaluated over and over again at rendertime.
E.g.:
#macro Super_Function_3D()
#local HalfPi = pi/2;
#local mm1 = 0.25*m1;
#local mm2 = 0.25*m2;
#local inn11 = 1/n11;
#local inn12 = 1/n12;
isosurface {
function {
pow(
pow(abs(cos(mm2*(f_ph(x, z, y) - HalfPi))/a2), n22) +
pow(abs(sin(mm2*(f_ph(x, z, y) - HalfPi))/b2), n32),
inn12
) *
pow(
pow(abs(cos(mm1*atan2(x, y))/a1), n21) +
pow(abs(sin(mm1*atan2(x, y))/b1), n31),
inn11
) *
f_r(x,y,z)
- 1
}
max_gradient 20
contained_by { box { <-2,-2,-2>,<2,2,2> } }
}
> #macro Super_Function_3D (m1, a1, b1, n11, n21, n31, m2, a2, b2, n12,
> n22, n32 )
>
> isosurface {
> function {
> pow( pow(abs(cos(0.25*m2*(f_ph(x,z,y)-pi/2))/a2),n22) +
> pow(abs(sin(0.25*m2*(f_ph(x,z,y)-pi/2))/b2),n32)
> ,1/n12) *
>
> pow( pow(abs(cos(0.25*m1*atan2(x,y))/a1),n21) +
> pow(abs(sin(0.25*m1*atan2(x,y))/b1),n31)
> ,1/n11) *
>
> f_r(x,y,z)
> - 1
> }
> max_gradient 20
> contained_by { box { <-2,-2,-2>,<2,2,2> } }
> }
>
> #end
>
> Regards, Hans
>
> Tor Olav Kristensen wrote:
>
>> Hans de Vries wrote:
>> ...
>>
>>> function {
>>> pow(
>>> pow(abs(cos(0.25*m2*asin(z/sqrt(x*x+y*y+z*z)))/a2),n22) +
>>>
>>> pow(abs(sin(0.25*m2*asin(z/sqrt(x*x+y*y+z*z)))/b2),n32)
>>> ,1/n12) *
>>>
>>> pow(
>>> pow(abs(cos(0.25*m1*acos(y/sqrt(x*x+y*y))*abs(y)/y)/a1),n21) +
>>>
>>> pow(abs(sin(0.25*m1*acos(y/sqrt(x*x+y*y))*abs(y)/y)/b1),n31)
>>> ,1/n11) *
>>>
>>> sqrt (x*x+y*y+z*z)
>>> - 1
>>> }
--
Tor Olav
http://subcube.com
http://subcube.net
Post a reply to this message
|
|