@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
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
回傳
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
回傳
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
回傳
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.
範例
const curve = new BCurve([...]);
const tangent = curve.derivativeByPercentage(0.5); // Derivative at midpoint
const normalized = PointCal.unitVector(tangent); // Normalize for directionderivativeNormalized()
derivativeNormalized(
tVal):Point
定義於: packages/curve/src/b-curve.ts:463
參數
tVal
number
回傳
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
endPoint
midPoint
回傳
object
center?
optionalcenter:Point
endPoint?
optionalendPoint:Point
exists
exists:
boolean
radius?
optionalradius:number
startPoint?
optionalstartPoint:Point
get()
get(
tVal):Point
定義於: packages/curve/src/b-curve.ts:343
參數
tVal
number
回傳
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
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
回傳
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
回傳
getProjection()
getProjection(
point):object
定義於: packages/curve/src/b-curve.ts:666
參數
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
回傳
setControlPointAtIndex()
setControlPointAtIndex(
index,newPoint):boolean
定義於: packages/curve/src/b-curve.ts:312
參數
index
number
newPoint
回傳
boolean
setControlPoints()
setControlPoints(
controlPoints):void
定義於: packages/curve/src/b-curve.ts:301
參數
controlPoints
Point[]
回傳
void
split()
定義於: packages/curve/src/b-curve.ts:507
參數
tVal
number
回傳
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
回傳
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
rotationAngle
number
回傳
Point[]