Skip to content

@ue-too/curve / index / BCurve

類別: BCurve ​

定義於: packages/curve/src/b-curve.ts:134

Bezier curve class supporting quadratic (3 points) and cubic (4 points) curves.

備註 ​

BCurve provides a comprehensive implementation of Bezier curves with:

  • Curve evaluation at any parameter t (0 to 1)
  • Arc-length calculation with caching for performance
  • Curve splitting and subdivision
  • Geometric queries (projection, intersection, extrema)
  • Advanced operations (offset, arc fitting, curvature)

Performance Optimizations ​

  • Optimized formulas for quadratic and cubic curves
  • Arc-length caching to avoid recomputation
  • Lazy computation of lookup tables (LUT)
  • Gauss-Legendre quadrature for arc-length calculation

Coordinate System ​

  • Parameter t ranges from 0 (start) to 1 (end)
  • Points use {x, y} coordinates
  • Supports 2D curves (z-coordinate optional but not used)

範例 ​

Create and evaluate a cubic Bezier curve

typescript
const curve = new BCurve([
  { x: 0, y: 0 },     // Start point
  { x: 33, y: 100 },  // Control point 1
  { x: 66, y: 100 },  // Control point 2
  { x: 100, y: 0 }    // End point
]);

// Evaluate at different positions
const start = curve.get(0);    // { x: 0, y: 0 }
const mid = curve.get(0.5);    // Midpoint
const end = curve.get(1);      // { x: 100, y: 0 }

// Get curve length
console.log('Length:', curve.fullLength);

// Get derivative (tangent vector)
const tangent = curve.derivative(0.5);

建構函式 ​

建構函式 ​

new BCurve(controlPoints): BCurve

定義於: packages/curve/src/b-curve.ts:171

參數 ​

controlPoints ​

Point[]

回傳 ​

BCurve

存取器 ​

AABB ​

Getter 簽章 ​

get AABB(): object

定義於: packages/curve/src/b-curve.ts:1469

回傳 ​

object

max ​

max: Point

min ​

min: Point


fullLength ​

Getter 簽章 ​

get fullLength(): number

定義於: packages/curve/src/b-curve.ts:423

回傳 ​

number

方法 ​

advanceAtTWithLength() ​

advanceAtTWithLength(tVal, length): AdvanceAtTWithLengthRes

定義於: packages/curve/src/b-curve.ts:1218

參數 ​

tVal ​

number

length ​

number

回傳 ​

AdvanceAtTWithLengthRes


advanceByDistance() ​

advanceByDistance(startT, distance): AdvanceAtTWithLengthRes

定義於: packages/curve/src/b-curve.ts:1306

參數 ​

startT ​

number

distance ​

number

回傳 ​

AdvanceAtTWithLengthRes


compute() ​

compute(tVal): Point

定義於: packages/curve/src/b-curve.ts:327

參數 ​

tVal ​

number

回傳 ​

Point


curvature() ​

curvature(tVal): number

定義於: packages/curve/src/b-curve.ts:937

參數 ​

tVal ​

number

回傳 ​

number


derivative() ​

derivative(tVal): Point

定義於: packages/curve/src/b-curve.ts:459

參數 ​

tVal ​

number

回傳 ​

Point


derivativeByPercentage() ​

derivativeByPercentage(percentage): Point

定義於: packages/curve/src/b-curve.ts:236

Gets the derivative (tangent vector) at a given percentage of the curve length.

參數 ​

percentage ​

number

Percentage of the curve length (0 to 1), where 0 is the start and 1 is the end

回傳 ​

Point

The derivative vector at the specified percentage along the curve

備註 ​

This method calculates the derivative at a point specified by percentage of arc length, not by the parameter t. This is useful when you want to sample the curve uniformly by distance rather than by parameter value.

範例 ​

typescript
const curve = new BCurve([...]);
const tangent = curve.derivativeByPercentage(0.5); // Derivative at midpoint
const normalized = PointCal.unitVector(tangent); // Normalize for direction

derivativeNormalized() ​

derivativeNormalized(tVal): Point

定義於: packages/curve/src/b-curve.ts:463

參數 ​

tVal ​

number

回傳 ​

Point


determinant3by3() ​

determinant3by3(matrix): number

定義於: packages/curve/src/b-curve.ts:924

參數 ​

matrix ​

number[][]

回傳 ​

number


findArcs() ​

findArcs(errorThreshold): object[]

定義於: packages/curve/src/b-curve.ts:737

參數 ​

errorThreshold ​

number

回傳 ​

object[]


findArcStartingAt() ​

findArcStartingAt(errorThreshold, low): { arc?: { center: Point; endPoint: Point; endT: number; radius: number; startPoint: Point; startT: number; }; good: boolean; } | null

定義於: packages/curve/src/b-curve.ts:772

參數 ​

errorThreshold ​

number

low ​

number

回傳 ​

{ arc?: { center: Point; endPoint: Point; endT: number; radius: number; startPoint: Point; startT: number; }; good: boolean; } | null


findClosest() ​

findClosest(x, y, LUT, circleRadius, distanceEpsilon, pd2?, pd1?): number

定義於: packages/curve/src/b-curve.ts:1415

參數 ​

x ​

number

y ​

number

LUT ​

object[]

circleRadius ​

number

distanceEpsilon ​

number = 5

pd2? ​

number

pd1? ​

number

回傳 ​

number


fitArc() ​

fitArc(startPoint, endPoint, midPoint): object

定義於: packages/curve/src/b-curve.ts:851

參數 ​

startPoint ​

Point

endPoint ​

Point

midPoint ​

Point

回傳 ​

object

center? ​

optional center: Point

endPoint? ​

optional endPoint: Point

exists ​

exists: boolean

radius? ​

optional radius: number

startPoint? ​

optional startPoint: Point


get() ​

get(tVal): Point

定義於: packages/curve/src/b-curve.ts:343

參數 ​

tVal ​

number

回傳 ​

Point


getArcLengthLUT() ​

getArcLengthLUT(steps): object

定義於: packages/curve/src/b-curve.ts:469

參數 ​

steps ​

number = 50

回傳 ​

object

arcLengthLUT ​

arcLengthLUT: object[]

controlPoints ​

controlPoints: Point[]


getArcs() ​

getArcs(errorThreshold): object[]

定義於: packages/curve/src/b-curve.ts:768

Get a sequence of circular arcs that approximate the curve.

參數 ​

errorThreshold ​

number

Maximum allowed radial error when fitting an arc.

回傳 ​

object[]

A list of arcs that cover the curve from (t=0) to (t=1).


getCacheStats() ​

getCacheStats(): object

定義於: packages/curve/src/b-curve.ts:149

Gets cache statistics for performance monitoring

回傳 ​

object

Object containing cache size and hit rate information

hitRate ​

hitRate: number

size ​

size: number


getCircleIntersections() ​

getCircleIntersections(circleCenter, circleRadius): object[]

定義於: packages/curve/src/b-curve.ts:1161

參數 ​

circleCenter ​

Point

circleRadius ​

number

回傳 ​

object[]


getCoefficientOfTTerms() ​

getCoefficientOfTTerms(): Point[]

定義於: packages/curve/src/b-curve.ts:961

回傳 ​

Point[]


getCoefficientOfTTermsWithControlPoints() ​

getCoefficientOfTTermsWithControlPoints(controlPoints): Point[]

定義於: packages/curve/src/b-curve.ts:971

參數 ​

controlPoints ​

Point[]

回傳 ​

Point[]


getControlPoints() ​

getControlPoints(): Point[]

定義於: packages/curve/src/b-curve.ts:297

回傳 ​

Point[]


getControlPointsAlignedWithXAxis() ​

getControlPointsAlignedWithXAxis(): object[]

定義於: packages/curve/src/b-curve.ts:1013

回傳 ​

object[]


getCurveIntersections() ​

getCurveIntersections(curve, deduplicationTolerance?): object[]

定義於: packages/curve/src/b-curve.ts:1458

參數 ​

curve ​

BCurve

deduplicationTolerance? ​

number

回傳 ​

object[]


getDerivativeCoefficients() ​

getDerivativeCoefficients(): Point[]

定義於: packages/curve/src/b-curve.ts:965

回傳 ​

Point[]


getDerivativeControlPoints() ​

getDerivativeControlPoints(controlPoints): Point[]

定義於: packages/curve/src/b-curve.ts:273

參數 ​

controlPoints ​

Point[]

回傳 ​

Point[]


getExtrema() ​

getExtrema(): object

定義於: packages/curve/src/b-curve.ts:1032

回傳 ​

object

x ​

x: number[]

y ​

y: number[]


getLineIntersections() ​

getLineIntersections(line): number[]

定義於: packages/curve/src/b-curve.ts:1116

參數 ​

line ​

Line

回傳 ​

number[]


getLUT() ​

getLUT(steps): Point[]

定義於: packages/curve/src/b-curve.ts:390

參數 ​

steps ​

number = 100

回傳 ​

Point[]


getLUTWithTVal() ​

getLUTWithTVal(steps?): object[]

定義於: packages/curve/src/b-curve.ts:405

參數 ​

steps? ​

number

回傳 ​

object[]


getPointbyPercentage() ​

getPointbyPercentage(percentage): Point

定義於: packages/curve/src/b-curve.ts:182

參數 ​

percentage ​

number

回傳 ​

Point


getProjection() ​

getProjection(point): object

定義於: packages/curve/src/b-curve.ts:666

參數 ​

point ​

Point

回傳 ​

object

projection ​

projection: Point = preliminaryProjectionPoint

tVal ​

tVal: number = preliminaryProjectionTVal


getSelfIntersections() ​

getSelfIntersections(): object[]

定義於: packages/curve/src/b-curve.ts:1147

回傳 ​

object[]


lengthAtT() ​

lengthAtT(tVal): number

定義於: packages/curve/src/b-curve.ts:431

參數 ​

tVal ​

number

回傳 ​

number


normal() ​

normal(tVal): object

定義於: packages/curve/src/b-curve.ts:1491

參數 ​

tVal ​

number

回傳 ​

object

direction ​

direction: Point

tVal ​

tVal: number


preWarmCache() ​

preWarmCache(steps): void

定義於: packages/curve/src/b-curve.ts:160

Pre-warms the cache with commonly used t values for better performance

參數 ​

steps ​

number = 100

Number of steps to pre-cache (default: 100)

回傳 ​

void


refineBinary() ​

refineBinary(curve, x, y, LUT, i, targetDistance, epsilon): { distance: number; point: Point; tVal: number; } | undefined

定義於: packages/curve/src/b-curve.ts:1354

參數 ​

curve ​

BCurve

x ​

number

y ​

number

LUT ​

object[]

i ​

number

targetDistance ​

number = 0

epsilon ​

number = 0.01

回傳 ​

{ distance: number; point: Point; tVal: number; } | undefined


secondDerivative() ​

secondDerivative(tVal): Point

定義於: packages/curve/src/b-curve.ts:954

參數 ​

tVal ​

number

回傳 ​

Point


setControlPointAtIndex() ​

setControlPointAtIndex(index, newPoint): boolean

定義於: packages/curve/src/b-curve.ts:312

參數 ​

index ​

number

newPoint ​

Point

回傳 ​

boolean


setControlPoints() ​

setControlPoints(controlPoints): void

定義於: packages/curve/src/b-curve.ts:301

參數 ​

controlPoints ​

Point[]

回傳 ​

void


split() ​

split(tVal): [Point[], Point[]]

定義於: packages/curve/src/b-curve.ts:507

參數 ​

tVal ​

number

回傳 ​

[Point[], Point[]]


splitAndTakeMidCurve() ​

splitAndTakeMidCurve(tVal, tVal2): BCurve

定義於: packages/curve/src/b-curve.ts:658

參數 ​

tVal ​

number

tVal2 ​

number

回傳 ​

BCurve


splitIn3Curves() ​

splitIn3Curves(tVal, tVal2): [BCurve, BCurve, BCurve]

定義於: packages/curve/src/b-curve.ts:638

參數 ​

tVal ​

number

tVal2 ​

number

回傳 ​

[BCurve, BCurve, BCurve]


splitIn3WithControlPoints() ​

splitIn3WithControlPoints(tVal, tVal2): [Point[], Point[], Point[]]

定義於: packages/curve/src/b-curve.ts:618

參數 ​

tVal ​

number

tVal2 ​

number

回傳 ​

[Point[], Point[], Point[]]


splitIntoCurves() ​

splitIntoCurves(tVal): [BCurve, BCurve]

定義於: packages/curve/src/b-curve.ts:502

參數 ​

tVal ​

number

回傳 ​

[BCurve, BCurve]


translateRotateControlPoints() ​

translateRotateControlPoints(translation, rotationAngle): Point[]

定義於: packages/curve/src/b-curve.ts:1102

參數 ​

translation ​

Point

rotationAngle ​

number

回傳 ​

Point[]