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.

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

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 ​

署名を取得する ​

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

戻り値 ​

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

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.

例 ​

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[]