@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.
Remarks
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
署名を取得する
get AABB():
object
定義: packages/curve/src/b-curve.ts:1469
戻り値
object
max
max:
Point
min
min:
Point
fullLength
署名を取得する
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
Remarks
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[]