35.1 SDO_UTIL.AFFINETRANSFORMS
Format
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;
Description
Returns a geometry that reflects an affine transformation of the input geometry.
Parameters
- geometry
-
Input geometry on which to perform the affine transformation.
- translation
-
A string value of
TRUEcauses translation to be performed; a string value ofFALSE(the default) causes translation not to be performed. If this parameter isTRUE, translation is performed about the point at (tx,ty) or (tx,ty,tz). - tx
-
X-axis value for translation. The default value is 0.0.
- ty
-
Y-axis value for translation. The default value is 0.0.
- tz
-
Z-axis value for translation. The default value is 0.0.
- scaling
-
A string value of
TRUEcauses scaling to be performed; a string value ofFALSE(the default) causes scaling not to be performed. - psc1
-
Point on the input geometry about which to perform the scaling. If
scalingisTRUE, this geometry should be either a zero point (point geometry with 0,0 or 0,0,0 ordinates for scaling about the origin) or a nonzero point (point geometry with ordinates for scaling about a point other than the origin). IfscalingisFALSE,psc1can be a null value. - sx
-
X-axis value for scaling (about either the point specified in the
psc1parameter or the origin). The default value is 0.0. - sy
-
Y-axis value for scaling (about either the point specified in the
psc1parameter or the origin). The default value is 0.0. - sz
-
Z-axis value for scaling (about either the point specified in the
psc1parameter or the origin). The default value is 0.0. - rotation
-
A string value of
TRUEcauses rotation to be performed; a string value ofFALSE(the default) causes rotation not to be performed.For two-dimensional geometries, rotation uses the
p1andanglevalues. For three-dimensional geometries, rotation uses either theangleanddirvalues or theline1andanglevalues. - p1
-
Point for two-dimensional geometry rotation about a specified point.
- line1
-
Line for rotation about a specified axis.
- angle
-
Angle rotation parameter (in radians) for rotation about a specified axis or about the X, Y, or Z axis. The default value is 0.0.
- dir
-
Rotation parameter for x(0), y(1), or z(2)-axis roll. If the
rotationparameter value isTRUEbut thedirparameter is not used, use a value of -1 (the default) - shearing
-
A string value of
TRUEcauses shearing to be performed; a string value ofFALSE(the default) causes shearing not to be performed.For two-dimensional geometries, shearing uses the
shxyandshyxparameter values. For three-dimensional geometries, shearing uses theshxy,shyx,shxz,shzx,shyz, andshzyparameter values. - shxy
-
Value for shearing due to X along the Y direction. The default value is 0.0.
- shyx
-
Value for shearing due to Y along the X direction. The default value is 0.0.
- shxz
-
Value for shearing due to X along the Z direction (three-dimensional geometries only). The default value is 0.0.
- shzx
-
Value for shearing due to Z along the X direction (three-dimensional geometries only).
- shyz
-
Value for shearing due to Y along the Z direction (three-dimensional geometries only).
- shzy
-
Value for shearing due to Z along the Y direction (three-dimensional geometries only).
- reflection
-
A string value of
TRUEcauses reflection to be performed; a string value ofFALSE(the default) causes reflection not to be performed.For two-dimensional geometries, reflection uses the
lineRvalue for reflection about an axis and theprefvalue for the centroid for self-reflection. For three-dimensional geometries, reflection uses thelineRvalue for reflection about an axis; thedirRvalue for reflection about the yz, xz, and xy planes; theplaneR,n, andbigDvalues for reflection about a specified plane; and theprefvalue for the centroid for self-reflection. - pref
-
Point through which to perform reflection.
- lineR
-
Line along which to perform reflection.
- dirR
-
Number indicating the plane about (through) which to perform reflection: 0 for the yz plane, 1 for the xz plane, or 2 for the xy plane. If the
reflectionparameter value isTRUEbut thedirRparameter is not used, use a value of -1 (the default). - planeR
-
A string value of
TRUEcauses reflection about an arbitrary plane to be performed; a string value ofFALSE(the default) causes reflection about an arbitrary plane not to be performed. - n
-
Normal vector of the plane.
- bigD
-
Delta value for the plane equation in three-dimensional geometries.
For three-dimensional geometries,
bigD= delta andn= (A,B,C) wherenis the normal of the plane in three-dimensional space. Thus, the plane equation is:Ax+By+Cz+bigD = 3DDotProd(n,anypointonplane)+bigD = 0
Usage Notes
Note:
The SDO_UTIL.AFFINETRANSFORMS function is supported only if Oracle JVM is enabled on your Oracle Autonomous AI Database Serverless deployments. To enable Oracle JVM, see Use Oracle Java in Using Oracle Autonomous AI Database Serverless for more information.The order of affine transforms matter because these are matrix and vector multiplications.
You should validate the resulting geometry using the SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT function.
Examples
The following example performs an affine transformation on a two-dimensional geometry.
-- 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))
The following is a simplified version of the preceding example, using the default values for most parameters.
-- 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))
The following example performs an affine transformation on a three-dimensional geometry.
-- 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))Related Topics
Parent topic: SDO_UTIL Package (Utility)