NURBS (Non-Uniform Rational B-Spline)曲線を使用すると、任意の形状で自由形式の形状の表現が可能になります。NURBS表現では、制御点とノットにより曲線の形状が決定され、わずかなデータで複雑な形状の表現が可能になるため、曲線の形状を制御することができます。NURBS曲線およびNURBS曲線ジオメトリを定義するための要件については、「Oracle Spatial and GraphでのNURBS曲線のサポート」を参照してください。
例2-15に、NURBS曲線ジオメトリをデータベースに挿入するSQL文を示します。
例2-15に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。
SDO_GTYPE = 2002。1つ目の2は2次元を、2つ目の2
は単一線ストリングを示します。
SDO_SRID = NULL。Oracle Spatial and Graphでは、測地NURBS曲線が許可されていないことに注意してください。
SDO_POINT = NULL。
SDO_ELEM_INFO_ARRAY = (1,2,3)。SDO_INTERPRETATION値3は、NURBS曲線を示します。
SDO_ORDINATE_ARRAYで、3はNURBS曲線の曲度、7は重み付け制御点の数、11はノット数値です。
例2-15 NURBS曲線ジオメトリを挿入するSQL文
CREATE TABLE nurbs_test (gid integer, geom sdo_geometry); INSERT INTO nurbs_test values( 1, SDO_GEOMETRY( 2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 3), /* Element type 2 = SDO_ETYPE_CURVE and Interpretation value 3 = NURBS curve */ SDO_ORDINATE_ARRAY (3, /* Degree of the NURBS curve */ 7, /* Number of weighted Control Points */ 0, 0, 1, /* x1, y1, w1 where w1 denotes the weight of the control point and x1, y1 are weighted values. Implies the actual coordinate values have been multiplied by w1 */ -0.5, 1, 1, 0.2, 2, 1, 0.5, 3.5, 1, 0.8, 2, 1, 0.9, 1, 1, 0.3, 0, 1, 11, /* Number of knot values = Number of control points + degree + 1 */ 0, 0, 0, 0, 0.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0))); /* Normalized knot vector; values start at zero and end at 1. Clamped at end points as multiplicity of zero and one is 4, which is equal to the degree of the curve + 1 */
例2-16 NURBS複合曲線ジオメトリを挿入するSQL文
例2-16に、NURBSセグメントを持つ複合曲線ジオメトリの共通部分を示します。例2-15で作成したのと同じNURBS_TEST表を使用します。
INSERT INTO nurbs_test VALUES( 1, SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 4, 2, 1, 2, 1, 5, 2, 3), SDO_ORDINATE_ARRAY(-1, -1, 0, 0, 3, 7, 0, 0, 1, -0.5, 1, 1, 0.2, 2, 1, 0.5, 3.5, 1, 0.8, 2, 1, 0.9, 1, 1, 0.3, 0, 1, 11, 0, 0, 0, 0, 0.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0) ));
例2-16に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。
SDO_GTYPE = 2002。1つ目の2は2次元を、2つ目の2
は単一線ストリングを示します。
SDO_SRID = NULL。Oracle Spatial and Graphでは、測地NURBS曲線が許可されていないことに注意してください。
SDO_POINT = NULL。
SDO_ELEM_INFO_ARRAY = (1, 4, 2, 1, 2, 1, 5, 2, 3)。最初の3つ組は、2つの要素を持つ複合線ストリング(共通部分 = 4)を示します。次の2つの3つ組は、複合線ストリングのセグメントを定義します。最初のセグメントはオフセット1で開始する線ストリング、2つ目のセグメントはオフセット5で開始するNURBSセグメントです。
SDO_ORDINATE_ARRAYでは、最初の4つ値は、単純な線ストリングである最初のセグメントを定義します。少なくとも1つのNURBSセグメントを含む複合線ストリングでは、共通の頂点はセグメント間で繰り返されます。この例では、線ストリングの最後の点(0,0)はNURBS曲線の最初の"固定された"点(0,0)と等しい必要があります。NURBSセグメントはオフセット5で開始するように定義され、最初の制御点は(0,0)であり、これが度(3)と制御点の数(7)に続きます。NURBSセグメントには11のノット値があります。