Я нашел около 1000 ответов на этот вопрос, но ни один из них я не могу использовать, потому что я использую 4 контрольных точки с моими кривыми.Попытка найти длину кривой Безье с 4 точками
То есть, я наткнулся на этого парня here:
double BezierArcLength(point2d p1, point2d p2, point2d p3, point2d p4)
{
point2d k1, k2, k3, k4;
k1 = -p1 + 3*(p2 - p3) + p4;
k2 = 3*(p1 + p3) - 6*p2;
k3 = 3*(p2 - p1);
k4 = p1;
q1 = 9.0*(sqr(k1.x) + sqr(k1.y));
q2 = 12.0*(k1.x*k2.x + k1.y*k2.y);
q3 = 3.0*(k1.x*k3.x + k1.y*k3.y) + 4.0*(sqr(k2.x) + sqr(k2.y));
q4 = 4.0*(k2.x*k3.x + k2.y*k3.y);
q5 = sqr(k3.x) + sqr(k3.y);
double result = Simpson(balf, 0, 1, 1024, 0.001);
return result;
}
Похоже, это было бы идеальным решением, но это начальная часть совершенно сбивает с толку меня:
k1 = -p1 + 3*(p2 - p3) + p4;
k2 = 3*(p1 + p3) - 6*p2;
k3 = 3*(p2 - p1);
k4 = p1;
Как на земле я должен выполнять операции, такие как добавление, вычитание и умножение на двумерные объекты (предположим, point2d - это структура объекта, такая как {x: 0, y: 0}
)? Я чувствую себя идиоткой, но это единственное, что мешает мне реализовать это чудовище.
FWIW, я использую это уравнение для нормализации скорости сущности при пересечении кривой в игре. Если вы знаете лучший способ сделать это, я все уши.
Вопрос: Как я должен выполнять операции, такие как добавление, вычитание и умножение на двумерные объекты? Ответ: Вы делаете их по одной координате (x или y) за раз. – geowar