書式
SDO_UTIL.AFFINETRANSFORMS( geometry IN SDO_GEOMETRY, translation IN VARCHAR2 DEFAULT 'FALSE', tx IN NUMBER DEFAULT 0.0, ty IN NUMBER DEFAULT 0.0, tz IN NUMBER DEFAULT 0.0, scaling IN VARCHAR2 DEFAULT 'FALSE', psc1 IN SDO_GEOMETRY DEFAULT NULL, sx IN NUMBER DEFAULT 0.0, sy IN NUMBER DEFAULT 0.0, sz IN NUMBER DEFAULT 0.0, rotation IN VARCHAR2 DEFAULT 'FALSE', p1 IN SDO_GEOMETRY DEFAULT NULL, line1 IN SDO_GEOMETRY DEFAULT NULL, angle IN NUMBER DEFAULT 0.0, dir IN NUMBER DEFAULT -1, shearing IN VARCHAR2 DEFAULT 'FALSE', shxy IN NUMBER DEFAULT 0.0, shyx IN NUMBER DEFAULT 0.0, shxz IN NUMBER DEFAULT 0.0, shzx IN NUMBER DEFAULT 0.0, shyz IN NUMBER DEFAULT 0.0, shzy IN NUMBER DEFAULT 0.0, reflection IN VARCHAR2 DEFAULT 'FALSE', pref IN SDO_GEOMETRY DEFAULT NULL, lineR IN SDO_GEOMETRY DEFAULT NULL, dirR IN NUMBER DEFAULT -1, planeR IN VARCHAR2 DEFAULT 'FALSE', n IN SDO_NUMBER_ARRAY DEFAULT NULL, bigD IN SDO_NUMBER_ARRAY DEFAULT NULL, ) RETURN SDO_GEOMETRY;
説明
入力ジオメトリのアフィン変換を反映したジオメトリを戻します。
パラメータ
アフィン変換を実行する入力ジオメトリを指定します。
文字列値がTRUE
である場合は移動が実行され、文字列値がFALSE
(デフォルト)の場合は移動が実行されません。このパラメータがTRUE
である場合、点について(tx,ty)または(tx,ty,tz)分の移動が実行されます。
移動のためのX軸値を指定します。デフォルト値は0.0です。
移動のためのY軸値を指定します。デフォルト値は0.0です。
移動のためのZ軸値を指定します。デフォルト値は0.0です。
文字列値がTRUE
である場合はスケール変更が実行され、文字列値がFALSE
(デフォルト)の場合はスケール変更が実行されません。
スケール変更を実行する入力ジオメトリ上の点を指定します。scaling
がTRUE
である場合、このジオメトリは、ゼロ点(基点を基準にスケール変更するための0,0または0,0,0の縦座標を持つ点ジオメトリ)またはゼロ以外の位置(基点以外の点を基準にスケール変更するための縦座標を持つ点ジオメトリ)のいずれかである必要があります。scaling
がFALSE
である場合、psc1
がNULL値になる場合があります。
(psc1
パラメータに指定した点か、基点を基準に)スケール変更するためのX軸値を指定します。デフォルト値は0.0です。
(psc1
パラメータに指定した点か、基点を基準に)スケール変更するためのY軸値を指定します。デフォルト値は0.0です。
(psc1
パラメータに指定した点か、基点を基準に)スケール変更するためのZ軸値を指定します。デフォルト値は0.0です。
文字列値がTRUE
である場合は回転が実行され、文字列値がFALSE
(デフォルト)の場合は回転が実行されません。
2次元ジオメトリの場合、回転にはp1
およびangle
の値が使用されます。3次元ジオメトリの場合、回転にはangle
およびdir
の値か、またはline1
およびangle
の値が使用されます。
指定した点を基準に2次元ジオメトリ回転を行うための点を指定します。
指定した軸を基準に回転を行うための線を指定します。
指定した軸またはX、Y、Z軸を基準に回転を行うための角度回転パラメータ(ラジアン)を指定します。デフォルト値は0.0です。
x(0)、y(1)またはz(2)軸回転のための回転パラメータを指定します。rotation
パラメータ値がTRUE
で、dir
パラメータが使用されていない場合は、値として-1 (デフォルト)を使用します。
文字列値がTRUE
である場合はせん断が実行され、文字列値がFALSE
(デフォルト)の場合はせん断が実行されません。
2次元ジオメトリの場合、せん断にはshxy
およびshyx
のパラメータ値が使用されます。3次元ジオメトリの場合、せん断にはshxy
、shyx
、shxz
、shzx
、shyz
およびshzy
のパラメータ値が使用されます。
Y軸方向に沿ってX座標値を基にせん断するための値を指定します。デフォルト値は0.0です。
X軸方向に沿ってY座標値を基にせん断するための値を指定します。デフォルト値は0.0です。
Z軸方向に沿ってX座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。デフォルト値は0.0です。
X軸方向に沿ってZ座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。
Z軸方向に沿ってY座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。
Y軸方向に沿ってZ座標値を基にせん断するための値を指定します(3次元ジオメトリのみ)。
文字列値がTRUE
である場合は反転が実行され、文字列値がFALSE
(デフォルト)の場合は反転が実行されません。
2次元ジオメトリの反転の場合、軸を基準とする反転ではlineR
値が、自己反転の中心点としてはpref
値が使用されます。3次元のジオメトリの反転の場合、軸を基準とする反転ではlineR
値が、yz面、xz面およびxy面を基準とする反転ではdirR
値が、指定した面を基準とする反転ではplaneR
、n
およびbigD
の値が、自己反転の中心点としてはpref
値が使用されます。
反転を実行するときの中心点となる点を指定します。
反転を実行するときの基準となる線を指定します。
反転を実行するときの基準となる面を示す番号を指定します。0はyz面、1はxz面、2はxy面です。reflection
パラメータ値にTRUE
を指定しているが、dirR
パラメータを使用しない場合は、-1 (デフォルト)を使用します。
文字列値がTRUE
である場合は任意の面を基準に反転が実行され、文字列値がFALSE
(デフォルト)の場合は任意の面を基準に反転が実行されません。
面の法線ベクトルを指定します。
3次元ジオメトリにおける面方程式のdelta値を指定します。
3次元ジオメトリの場合、bigD
= deltaおよびn
= (A,B,C)です(n
は3次元空間の面の法線です)。つまり、面方程式は次のようになります。
Ax+By+Cz+bigD = 3DDotProd(n,anypointonplane)+bigD = 0
使用上の注意
アフィン変換は行列とベクトルの乗算であるため、その変換順序は重要です。
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTファンクションを使用して、結果のジオメトリを検証する必要があります。
例
次の例では、2次元ジオメトリに対してアフィン変換を実行します。
-- Polygon reflection in 2D about a specified line segment SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1), sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)), translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, scaling => 'FALSE', psc1 => NULL, sx => 0.0, sy => 0.0, sz => 0.0, rotation => 'TRUE', p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null), line1 => NULL, angle => -2.35253274913915, dir => -1, shearing => 'FALSE', shxy => 0.0, shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, reflection => 'FALSE', pref => NULL, lineR => NULL, dirR => 0, planeR => 'FALSE', n => NULL, bigD => NULL ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR -------------------------------------------------------------------------------- SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122, 0, 2))
ほとんどのパラメータにデフォルト値を使用している、前述の例の簡単なバージョンを次に示します。
-- Simpler form, using most default values SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1), sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)), rotation => 'TRUE', p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null), angle => -2.35253274913915 ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR -------------------------------------------------------------------------------- SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122, 0, 2))
次の例では、3次元ジオメトリに対してアフィン変換を実行します。
-- Polygon reflection in 3D about a specified plane (z=1 plane in this example) SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => MDSYS.SDO_GEOMETRY(3003, 0, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY( 1.5,0,0, 2.5,1,0, 1.5,2,0, 0.5,2,0, 0.5,0,0, 1.5,0,0)), translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, scaling => 'FALSE', psc1 => NULL, sx => 0.0, sy => 0.0, sz => 0.0, rotation => 'FALSE', p1 => NULL, line1 => NULL, angle => 0.0, dir => 0, shearing => 'FALSE', shxy => 0.0, shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, reflection => 'TRUE', pref => NULL, lineR => NULL, dirR => -1, planeR => 'TRUE', n => SDO_NUMBER_ARRAY(0.0, 0.0, 1.0), bigD => SDO_NUMBER_ARRAY(-1.0) ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(3003,0,NULL,MDSYS.SDO_ELE -------------------------------------------------------------------------------- SDO_GEOMETRY(3003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(1.5, 0, 2, 2.5, 1, 2, 1.5, 2, 2, .5, 2, 2, .5, 0, 2, 1.5, 0, 2))