プライマリ・コンテンツに移動
Oracle® Spatial and Graph開発者ガイド
12cリリース1 (12.1)
B72470-07
目次へ移動
目次
索引へ移動
索引

前
次

2.7.8 NURBS曲線

NURBS (Non-Uniform Rational B-Spline)曲線を使用すると、任意の形状で自由形式の形状の表現が可能になります。NURBS表現では、制御点とノットにより曲線の形状が決定され、わずかなデータで複雑な形状の表現が可能になるため、曲線の形状を制御することができます。NURBS曲線およびNURBS曲線ジオメトリを定義するための要件については、「Oracle Spatial and GraphでのNURBS曲線のサポート」を参照してください。

例2-15に、NURBS曲線ジオメトリをデータベースに挿入するSQL文を示します。

例2-15に示すジオメトリのSDO_GEOMETRY定義は、次のとおりです。

例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のノット値があります。