Próba znalezienia długości krzywej Beziera z 4 punktami

Znalazłem około 1000 odpowiedzi na to pytanie, ale żadnego z nich nie mogę użyć, ponieważ używam 4 punktów kontrolnych z moimi krzywymi.

Powiedziałem, że natknąłem się na tego facetatutaj:

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;
}

Wygląda na to, że będzie to idealne rozwiązanie, ale ta część początkowa jest dla mnie całkowicie myląca:

k1 = -p1 + 3*(p2 - p3) + p4;
k2 = 3*(p1 + p3) - 6*p2;
k3 = 3*(p2 - p1);
k4 = p1;

Jak na ziemi mam wykonywać operacje takie jak dodawanie, odejmowanie i mnożenie na obiektach dwuwymiarowych (zakładam, że punkt2d jest strukturą obiektu, taką jak{x: 0, y: 0})? Czuję się idiotycznie, ale to jedyna rzecz, która powstrzymuje mnie od faktycznego wdrożenia tej potworności.

FWIW, używam tego równania do normalizacji prędkości jednostki podczas przechodzenia przez krzywą w grze. Jeśli znasz lepszy sposób na zrobienie tego w ogóle, jestem cały uszy.

questionAnswers(2)

yourAnswerToTheQuestion