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