для контекста, это мой обычный расчет Безье в Rational, который работает без каких-либо проблем (на основе как учебника Pomax по кривым Безье, так и видео Фрейи Холмер
Вот мой обычный и рабочий код для Rational Кривая Безье
Код: Выделить всё
float CalculateCubic(float t, float[] points, float[] weights)
{
float t2 = t * t;
float t3 = t2 * t;
float[] f = {
weights[0] * (-t3 + 3 * t2 - 3*t + 1),
weights[1] * (3 * t3 - 6 * t2 + 3 * t),
weights[2] * (-3 * t3 + 3 * t2),
weights[3] * (t3)
};
float basis = f[0] + f[1] + f[2] + f[3];
return (f[0] * points[0] + f[1] * points[1] + f[2] * points[2] + f[3] * points[3]) /basis;
}
Код: Выделить всё
float CalculateCubicTangent(float t, float[] points, float[] weights)
{
float t2 = t * t;
float[] f = {
weights[0] * (-3 * t2 + 6 * t - 3),
weights[1] * (9 * t2 - 12 * t + 3),
weights[2] * (-9 * t2 + 6 * t),
weights[3] * (3 * t2)
};
float basis = f[0] + f[1] + f[2] + f[3];
return (f[0] * points[0] + f[1] * points[1] + f[2] * points[2] + f[3] * points[3]) / basis;
}
Итак, мне интересно, что я делаю неправильно/как мне на самом деле следует подойти к этой проблеме? любые ресурсы по этой части также приветствуются!
Подробнее здесь: https://stackoverflow.com/questions/790 ... zier-curve