ST_MakeNurbsCurve — Skapar en NURBS-kurva (Non-Uniform Rational B-Spline) från kontrollpunkter, valfria vikter och valfri knutvektor.
geometry ST_MakeNurbsCurve(integer degree, geometry control_points, float8[] weights, float8[] knots);
Skapar en NURBS-kurvgeometri (Non-Uniform Rational B-Spline) från angivna parametrar. NURBS-kurvor är jämna parametriska kurvor som ger exakt styrning av kurvans form genom kontrollpunkter, vikter och knutvärden.
Parametern degree anger kurvans polynomgrad (måste ligga mellan 1 och 10). Högre grader ger jämnare kurvor.
control_points måste vara en LINESTRING-geometri som definierar kontrollpolygonen. Antalet kontrollpunkter måste vara minst degree + 1.
Den valfria matrisen weights tilldelar varje kontrollpunkt en vikt. Alla vikter måste vara positiva. Om den är NULL eller utelämnas används likformiga vikter (1.0), vilket ger en icke-rationell B-spline.
Den valfria matrisen knots definierar parameterutrymmet. Om den är NULL eller utelämnas genereras automatiskt en likformigt begränsad knutvektor. Om den anges måste knutvektorn ha exakt (npoints + degree + 1) element och vara icke-minskande.
Tillgänglig sedan: 3.7.0
Det här exemplet skapar en NURBS-kurva av grad 2 med likformiga vikter.
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)))
Det här exemplet skapar en rationell NURBS-kurva med anpassade vikter.
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)))
Det här exemplet skapar en NURBS-kurva med en olikformig knutvektor.
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)))