hyperfun:hf_sample
Table of Contents
HyperFun: sample model
Sample model without attributes
--This HyperFun program consists of one object:
--union of superellipsoid, torus and soft object
my_model(x[3], a[1])
{
array x0[9], y0[9], z0[9], d[9], center[3];
x1=x[1];
x2=x[2];
x3=x[3];
-- superellipsoid by formula
superEll = 1-(x1/0.8)^4-(x2/10)^4-(x3/0.8)^4;
-- torus by library function
center = [0, -9, 0];
torus = hfTorusY(x,center,3.5,1);
-- soft object
x0 = [2.,1.4, -1.4, -3, -3, 0, 2.5, 5., 6.5];
y0 = [8, 8, 8, 6.5, 5, 4.5, 3, 2, 1];
z0 = [0, -1.4,-1.4, 0, 3, 4, 2.5, 0, -1];
d = [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.7, 3];
sum = 0.;
i = 1;
while (i<10) loop
xt = x[1] - x0[i];
yt = x[2] - y0[i];
zt = x[3] - z0[i];
r = sqrt(xt*xt+yt*yt+zt*zt);
if (r <= d[i]) then
r2 = r*r; r4 = r2*r2; r6 = r4*r2;
d2 = d[i]^2; d4 = d2*d2; d6 = d4*d2;
sum = sum + (1 - 22*r2/(9*d2) +
17*r4/(9*d4) - 4*r6/(9*d6));
endif;
i = i+1;
endloop;
soft = sum - 0.2;
-- final model as set-theoretic union
my_model = superEll | torus | soft;
}
Model with attributes
my_model
my_partition
--This object is provided as a test.
--This HyperFun program consists of one geometric object:
--union of superellipsoid, torus and soft object
--Below two space paritions for attributes s[]
--First paritition
-- consisting in a union of blocks (5x5x5)
-- between blocks, attribute is a blue color
-- inside the block, attribute is a blue color
--Second parition
-- consisting in a torus
my_partition(x[3],a[1],s[3])
{
array xxt[3],center[3];
----------------
--first parition
blocks = -1; --function value for the block partition
i=0;
j=0;
k=0;
dx = 3.35; -- size of the bricks in x direction
dy = 3.35; -- size of the bricks in y direction
dz = 3.35; -- size of the bricks in z direction
NN = 5; -- size of the grid of blocks: NNxNNxNN
while (i<NN) loop --loop along x axis
j=0;
while (j<NN) loop --loop along y axis
k=0;
while (k<NN) loop --loop along z axis
--definition of the block center
center[1] = -10 + i*(4);
center[2] = -6 + j*(4);
center[3] = -10 + k*(4);
--union of the blocks
blocks = blocks | hfBlock(x,center,dx,dy,dz);
k =k+1;
endloop;
j=j+1;
endloop;
i=i+1;
endloop;
--default color: mortar
s[1] = 0.0;
s[2] = 0.0;
s[3] = 1.0;
-- color of the briks
if(blocks>=0.0) then
s[1] = 1.0;
s[2] = 0.0;
s[3] = 0.0;
endif;
----------------
--second parition
-- torus is a partition corresponding to the torus in the geometry model
-- torus is defined by library function: a bit larger than the one defined in my_object
center = [0, -9, 0];
torus = hfTorusY(x,center,3.5,1.2);
if(torus > -0.01) then
s[1] = hfA_Wave(x[1],0,1,1);
s[2] = hfA_Wave(x[2],0.2,0.8,2);
s[3] = 0.2;
endif;
my_partition = blocks | torus;
}
my_model(x[3], a[1], s[3])
{
array x0[9], y0[9], z0[9], d[9], center[3];
x1=x[1];
x2=x[2];
x3=x[3];
-- superellipsoid by formula
superEll = 1-(x1/0.8)^4-(x2/10)^4-(x3/0.8)^4;
-- torus by library function
center = [0, -9, 0];
torus = hfTorusY(x,center,3.5,1);
-- soft object
x0 = [2.,1.4, -1.4, -3, -3, 0, 2.5, 5., 6.5];
y0 = [8, 8, 8, 6.5, 5, 4.5, 3, 2, 1];
z0 = [0, -1.4,-1.4, 0, 3, 4, 2.5, 0, -1];
d = [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.7, 3];
sum = 0.;
i = 1;
while (i<10) loop
xt = x[1] - x0[i];
yt = x[2] - y0[i];
zt = x[3] - z0[i];
r = sqrt(xt*xt+yt*yt+zt*zt);
if (r <= d[i]) then
r2 = r*r; r4 = r2*r2; r6 = r4*r2;
d2 = d[i]^2; d4 = d2*d2; d6 = d4*d2;
sum = sum + (1 - 22*r2/(9*d2) + 17*r4/(9*d4) - 4*r6/(9*d6));
endif;
i = i+1;
endloop;
soft = sum - 0.2;
model = superEll | torus | soft;
--define the space partition around this model and attributes obtained in s[] array
if ( model > -0.1) then
tmpP = my_partition(x,a,s);
endif;
-- final geometry model with attributes returned in s[] array
my_model =model ;
}
hyperfun/hf_sample.txt · Last modified: by 127.0.0.1
