Кривые

Что есть

Bezier с ручками

var bezier = new FBezier3(new[]
{
    new FBezier3.Point(
        new FVector3(0, 0, 0),           // Position
        new FVector3(1, 0, 0),           // WeightForward (ручка вперёд)
        new FVector3(0, 0, 0)),          // WeightBack   (ручка назад)
    new FBezier3.Point(
        new FVector3(3, 1, 0),
        new FVector3(0, 0, 0),
        new FVector3(1, -1, 0))
});

var p = bezier.Compute(0.25f); // t масштабируется на сегмент между соседними точками

t < 0 и t > 1 экстраполируются линейно по задней/передней ручке крайней точки. На каждый отрезок приходится диапазон \(\Delta t = \frac{1}{\text{Count}-1}\).

Catmull-Rom

var knots = new[]
{
    new FVector3(-1, 0, 0),
    new FVector3(0, 1, 0),
    new FVector3(1, 1, 0),
    new FVector3(2, 0, 0)
};
var cr = new FCatmullRom3(knots); // нужно минимум 4 точки
var p = cr.Compute(0.5f);         // t в [0,1] проходится по сегментам внутри массива

Количество сегментов = Count - 3; выбор t вне [0,1] не защищён — ограничивайте значение сами.

Практика


© 2026 Igdrasil Project. Все права защищены.