Namn

ST_MakeNurbsCurve — Skapar en NURBS-kurva (Non-Uniform Rational B-Spline) från kontrollpunkter, valfria vikter och valfri knutvektor.

Synopsis

geometry ST_MakeNurbsCurve(integer degree, geometry control_points, float8[] weights, float8[] knots);

Beskrivning

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

Exempel

Det här exemplet skapar en NURBS-kurva av grad 2 med likformiga vikter.

Kod
SELECT ST_MakeNurbsCurve(
    2,
    'LINESTRING(0 0,5 10,10 0)'::geometry
);
Utdata
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)))
Figur
Geometry figure for visual-st-makenurbscurve-01

Det här exemplet skapar en rationell NURBS-kurva med anpassade vikter.

Kod
SELECT ST_MakeNurbsCurve(
    2,
    'LINESTRING(0 0,5 10,10 0)'::geometry,
    ARRAY[1.0, 2.0, 1.0]
);
Utdata
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)))
Figur
Geometry figure for visual-st-makenurbscurve-02

Det här exemplet skapar en NURBS-kurva med en olikformig knutvektor.

Kod
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]
);
Utdata
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)))
Figur
Geometry figure for visual-st-makenurbscurve-03