isosurface {
function { S(x,y,z) - S(x-0.1, y,z)}
max_gradient 2
contained_by{sphere{0,R}}
pigment {White}
}
Разность двух сфер
4. Гладкое сопряжение
С помощью умножения функций, задающих изоповерхности, можно добиться эффекта, подобного тому, что достигается при работе с blob - объектами - к примеру, плавного перехода одной поверхности в другую.
Рассмотрим пример, в котором параллелепипед плавно переходит в цилиндр:
#include "functions.inc"
#include "colors.inc"
camera {
location <5, 3.5, 5>
look_at <3, 2, 3>
angle 50
}
light_source {<-100,200,-100> colour rgb 1}
#declare S1 = function { sqrt(pow(y,2) + pow(z,2)) - 0.8 } // цилиндр
#declare S2 = function { abs(x)+abs(y)-1 } // перевернутый параллелепипед
isosurface {
function { S1(x,y,z)*S2(x, y,z)-0.03}
max_gradient 6
contained_by{sphere{0,2}}
pigment {White}
}
Данный прием удобнее тем, что он применим при работе с любыми поверхностями, а не только со сферами и цилиндрами, как при работе c blob-объектами.
3. Примеры функционально описанных объектов:
Примечание: символ ^ означает возведение в степень.
-z+5+50*sin(sqr((x+2)^2+y^2))
-z+5+sin(sqr((x+40)^2+y^2))+sin(sqr(x^2+y^2))
Две затухающие волны
-z+5+5*exp(-0.2*sqr(x^2+y^2)+0.1)*sin(sqr(x^2+y^2)-3.14/2)+9*exp(-0.2*sqr((x-30)^2+y^2)+0.1)*sin(sqr((x-30)^2+y^2)-3.14/2)
конус
-z+5+sqr((x+2)^2+y^2)
конус с пимпой
mzero(-20+sqr((x+2)^2+y^2))*(-20+sqr((x+2)^2+y^2)-z)+mzero(20-sqr((x+2)^2+y^2))*(-z+50)
Ограничения
mzero(-x+2)*mzero(-y+7)
mzero(-y+7)*mzero(x+3)*mzero(-x+20)
Параллелипипид
mzero(-y+20)*mzero(x+3)*mzero(-x+20)*mzero(y-8)*mzero(z-10)*mzero(-z+20)
3хмерный синус
-z+sqr((25-(y-6*sin(x/6))^2)*mzero(25-(y-6*sin(x/6))^2))
3хмерный синус, вдавленный в параллипипид
-z-sqr((25-(y-sin(x))^2)*mzero(25-(y-sin(x))^2))
3хмерный синус, вдавленный в параллипипид
(-z+20-sqr((25-(y-sin(x))^2)*mzero(25-(y-sin(x))^2)))*mzero(-y+10)*mzero(x+10)*mzero(-x+40)*mzero(y+10)*mzero(z-10)
Сверло
(100-(3*cos(0.5*z)-x)^2-(3*sin(0.5*z)-y)^2)*mzero(z-sqr((x+2)^2+y^2))
-z+sqr((25-(y-6*sin(0.5*x))^2)*mzero(25-(y-6*sin(0.5*x))^2))
-z+(atn(y/x)*mzero(x)+(atn(y/x)+3.14/2)*mzero(-x))
Сердечко
(-((2*z^2+x^2+y^2-1)^3-(0.1*z^2+x^2)*y^3))
Глазик с веком
(-((z^2+x^2+y^2-10)^3-(0.9*z^2+y)*y^2))
Цветочек
(-((z^2+x^2+y^2-10)^3-(2*(z*x)^2)*y^5))