すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ST_Affine

最終更新日:Sep 26, 2024

このトピックでは、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 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 + zoff
    x' = 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 10,10 0), INDEX((0,1,2),(1,2,3)))))'::meshgeom,  cos(pi()), -sin(pi()), 0,  sin(pi()), cos(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 array
select ST_asText(ST_Affine('MESHGEOM(PATCH(INDEXSURFACE(VERTEX(0 0,0 10,10 10,10 0), INDEX((0,1,2),(1,2,3)))))'::meshgeom,  ARRAY[cos(pi()), -sin(pi()), 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}