ST_MakeNurbsCurve — 制御点からNURBS (非一様有理Bスプライン)曲線を生成します。任意で重みとノットベクトルを与えられます。
geometry ST_MakeNurbsCurve(integer degree, geometry control_points, float8[] weights, float8[] knots);
指定したパラメーターからNURBS (非一様有理Bスプライン)曲線ジオメトリを生成します。NURBS曲線は平滑化される媒介変数曲線で、制御点、重み、ノットベクトルで曲線形状を精密に制御できます。
degreeパラメーターで曲線の多項式次数を指定します (1と10の間でなければなりません)。最高次数で滑らかな曲線が作られます。
control_pointsは制御ポリゴンを定義するLINESTRINGでなければなりません。制御点の数は最低でもdegree + 1個が必要です。
任意パラメーターweights配列は制御点ごとの重みを割り当てるものです。全ての重みは正の数である必要があります。NULLまたは省略された場合には重みは一様に 1.0 が使われるので、非有理のBスプラインになります。
任意パラメーターknots配列はパラメーター空間を定義します。NULLまたは省略された場合には、クランプされた一様のノットベクトルが自動的に生成されます。ノットベクトルを与えた場合には、(npoints + degree + 1)を確実に持たなければならず、かつ降順であってはなりません。
Availability: 3.7.0
この例では次数2のNURBS曲線を一様の重みで生成しています。
SELECT ST_MakeNurbsCurve(
2,
'LINESTRING(0 0,5 10,10 0)'::geometry
);
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3)))
この例では有理のNURBS曲線を独自の重みを指定して生成しています。
SELECT ST_MakeNurbsCurve(
2,
'LINESTRING(0 0,5 10,10 0)'::geometry,
ARRAY[1.0, 2.0, 1.0]
);
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 10),WEIGHT 2), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3)))
This example creates a NURBS curve with a non-uniform knot vector.
SELECT ST_MakeNurbsCurve(
2,
'LINESTRING(0 0,3 10,7 10,10 0)'::geometry,
ARRAY[1.0, 1.0, 1.0, 1.0],
ARRAY[0.0, 0.0, 0.0, 0.3, 1.0, 1.0, 1.0]
);
NURBSCURVE(DEGREE 2, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(3 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(7 10),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(0.3,1), KNOT(1,3)))