Лабораторная работа: Построение изоповерхностей

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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))