このトピックでは、ST_Affine関数について説明します。 この関数は、指定されたアフィン変換をmeshgeomまたはsfmeshオブジェクトに適用します。
構文
meshgeom ST_Affine(meshgeom geom、float a、float b、float c、float d、float e、float f、float g、float h、float i、float xoff、float yoff、float zoff *);*
meshgeom ST_Affine(meshgeom geom, float[] p);
sfmesh ST_Affine(sfmesh sfmesh、float a、float b、float c、float d、float e、float f、float g、float h、float i、float xoff、float yoff、float zoff);
sfmesh ST_Affine(sfmesh sfmesh, float[] p);
sfmesh ST_Affine(float8[] p、float8[] p2); パラメーター
パラメーター | 説明 |
geom | meshgeomオブジェクト。 |
sfmeshObject | sfmeshオブジェクト。 |
a-i | パラメーターの値 |
xoff | x座標のオフセット単位。 |
yoff | y座標のオフセット単位。 |
zoff | z座標のオフセット単位。 |
p | 16個のアフィン変換パラメータの行列。 |
p2 | 16個のアフィン変換パラメータの行列。 |
説明
この関数は、アフィン変換行列を生成する。
/ a b c xoff \ | d e f yoff | | g h i zoff | \0 0 1 // p[1] p[2] p[3] p[4] \ | p[5] p[6] p[7] p[8] | | p[9] p[10] p[11] p[12] | \p[13] p[14] p[15] p[16] /この関数は、meshgeomまたはsfmeshオブジェクトの座標を処理します。
x' = a * x + b * y + c * z + xoff y' = d * x + e * y + f * z + yoff z' = g * x + h * y * i * z + zoffx' = p[1]* x + p[2]* y + p[3]* z + p[4] y' = p[5]* x + p[6]* y + p[7]* z + p[8] z' = p[9]* x + p[10]* y + p[11]* z + p[12]
例
select ST_asText(ST_Affine('MESHGEOM(PATCH(INDEXSURFACE(VERTEX(0 0,0 10,10 0)), INDEX((0,1,2),(1,2,3)))))':::meshgeom, cos(pi()), -sin(pi())), 0, 0, 0 1、0、0、0);
----------------------------------------------------------------------
MESHGEOM(PATCH(INDEXSURFACE(VERTEX(0 0,0 -10,-10 -10,-10 0)),INDEX((0,1,2),(1,2,3)))))
-- float配列
select ST_asText(ST_Affine('MESHGEOM(PATCH(INDEXSURFACE(VERTEX(0 0,0 10,10 0)), INDEX((0,1,2),(1,2,3))))))':::meshgeom, ARRAY[cos(pi()), -sin(pi())), 0, 0, 0
sin(pi()) 、cos(pi()) 、0、0、0, 0, 1, 0,
0, 0, 0, 0]::float8[]);
----------------------------------------------------------------------
MESHGEOM(PATCH(INDEXSURFACE(VERTEX(0 0,0 -10,-10 -10,-10 0)),INDEX((0,1,2),(1,2,3)))))
-- float array Affine float array
select st_affine('{-0.3583679495453059,-0.9335804264971996,0,72.60910593620417,0.9335804264971996,-0.3583679495453059,0,82.98262879309624,0,0,1,96.52,0,0,0,1}'::float8[], '{-0.3583679495453059,-0.9335804264971996,0,63.25570597150741,0.9335804264971996,-0.3583679495453059,0,107.3490699956786,0,0,1,87.92,0,0,0,1}'::float8[]);
----------------------------------------------------------------------
{-0.743144825477386、0.669130606358867、0、-50.2787022604891、-0.669130606358867、-0.743144825477386、0,103.566451652411、0,0、1,184.44、0,0、0,1}