Namn

CG_NurbsCurveDerivative — Beräknar derivatan (tangent, krökning) för en NURBS-kurva vid en angiven parameter

Synopsis

geometry CG_NurbsCurveDerivative(geometry nurbscurve, float8 parameter, integer derivative_order);

Beskrivning

Beräknar derivatan för en NURBS-kurva vid ett specifikt parametervärde. Derivatan representerar förändringstakten vid den punkten:

  • Ordning 1: tangentvektor (riktning och hastighet)

  • Ordning 2: krökningsvektor (hur tangenten förändras)

  • Ordning 3: derivata av tredje ordningen (högsta stöd som finns)

Parametrar:

  • nurbscurve – en NURBS-kurvgeometri.

  • parameter – parametervärde för utvärdering (vanligen 0.0 till 1.0).

  • derivative_order – ordning på derivatan som ska beräknas (1, 2 eller 3).

Returnerar en POINT-geometri som representerar derivatavektorn vid den angivna parametern.

Tillgänglighet: 3.7.0 – kräver SFCGAL >= 2.3.0.

Denna metod behöver SFCGAL-backend.

Denna funktion stöder 3d och kommer inte att tappa z-index.

Exempel

Den första derivatan ger tangentvektorn vid utvärderingsparametern.

Kod
WITH data AS (
  SELECT 'NURBSCURVE (2, (0.00 0.00, 5.00 10.00, 10.00 0.00))'::geometry AS input_curve
)
SELECT input_curve AS input_curve,
       CG_NurbsCurveDerivative(input_curve, 0.5, 1) AS tangent
FROM data;
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))) | POINT Z (10 0 0)
Figur
Geometry figure for visual-cg-nurbscurvederivative-01

Den andra derivatan visar krökningsförändringen för en kurva av högre grad.

Kod
WITH data AS (
  SELECT 'NURBSCURVE (3, (0.00 0.00, 2.00 8.00, 5.00 5.00, 8.00 2.00, 10.00 0.00))'::geometry AS input_curve
)
SELECT input_curve AS input_curve,
       CG_NurbsCurveDerivative(input_curve, 0.5, 2) AS curvature
FROM data;
Utdata
NURBSCURVE(DEGREE 3, CONTROLPOINTS(NURBSPOINT(WEIGHTEDPOINT(0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(2 8),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(5 5),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(8 2),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT(10 0),WEIGHT 1)),KNOTS (KNOT(0,4), KNOT(0.5,1), KNOT(1,4))) | POINT Z (9 -9 0)
Figur
Geometry figure for visual-cg-nurbscurvederivative-02

Samma derivataanrop fungerar också för 3D-NURBS-kurvor.

Kod
WITH data AS (
  SELECT 'NURBSCURVE Z (2, (0.00 0.00 0.00, 5.00 10.00 5.00, 10.00 0.00 0.00))'::geometry AS input_curve
)
SELECT input_curve AS input_curve,
       CG_NurbsCurveDerivative(input_curve, 0.5, 1) AS tangent
FROM data;
Utdata
NURBSCURVE Z (DEGREE 2,CONTROLPOINTS Z (NURBSPOINT(WEIGHTEDPOINT Z (0 0 0),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (5 10 5),WEIGHT 1), NURBSPOINT(WEIGHTEDPOINT Z (10 0 0),WEIGHT 1)),KNOTS (KNOT(0,3), KNOT(1,3))) | POINT Z (10 0 0)
Figur
Geometry figure for visual-cg-nurbscurvederivative-03