Я пытаюсь вычислить касательную кубической кривой Безье, определенной точками p0, p1, p2, p3 и t.
Я знаю, что это должен быть простой расчет, а касательная должна быть просто производной уравнения кубической кривой Безье.Я пытаюсь сделать это таким же образом, как я вычисляю свои точки кривой: то есть, отдельно передавая значения x каждого p0-p3 в кубическое уравнение Безье, а затем делая то же самое с точкой y, а затем используя результаты длякоординаты x, y следующей точки на кривой (следующей будет точка в точке t)
Проблема в том, что, хотя приведенное выше уравнение работает, и я получаю точную кривую Безье, когда пытаюсь выполнитьто же самое для касательных векторов в точке t, они все массивно отключены (особенно слишком высоко (значение -y) и слева).
Другая проблема, которая меня беспокоит, заключается в том, что я знаю, что касательный вектор к кривой при t = 0.0 должен быть от p0 до p1, однако при примененииэто к производной, это заканчивается (упрощенно): -3 * p0 + 3 * p1
Что никогда не будет p1, если бы p1 и p0 не были одинаковыми?
Я чувствую, что мне здесь не хватает дополнительного шага.
Я также посмотрел на Найдите касательную точки на кубической кривой Безье , которая нея не работаю
Я должен также упомянуть, что я делаю все это на холсте java graphics2d, поэтому начало координат находится в верхнем левом углу, а положительная ось y - "вниз", а отрицательная ось y - "вверх" и ось x.это нормально - я не уверен, есть ли проблема с этим.
Код для расчета кривой Безье (только x или y)
private static double getPoint(double a0, double a1, double a2, double a3, double detail) {
return Math.pow(1 - detail, 3) * a0
+ 3 * Math.pow(1 - detail, 2) * detail * a1
+ 3 * (1 - detail) * Math.pow(detail, 2) * a2
+ Math.pow(detail, 3) * a3;
}
Код для вычисления касательной приведен ниже.
double tan = -3 * p0 * (Math.pow(1-t,2)) +
p1 * (3*(Math.pow(1-t,2)) - 6*(1-t)*t) +
p2*(6 * (1-t) * t) - (3 * Math.pow(t,2)) +
3 * p3 * Math.pow(t, 2);`
Здесь я бы передал в х-значения для p0 - p3, а затем значения y для p0-p3 и получить координаты (конца?) касательной от обоих из них.
Есть ли что-нибудь вопиюще очевидное, что я пропускаю?