Versuch, die Länge einer Bézierkurve mit 4 Punkten zu ermitteln

Ich habe ungefähr 1000 Antworten auf diese Frage gefunden, aber keine kann ich verwenden, da ich 4 Kontrollpunkte für meine Kurven verwende.

Trotzdem bin ich über diesen Typen gestolpertHier:

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

Es sieht so aus, als wäre es die perfekte Lösung, aber dieser Anfang verwirrt mich zutiefst:

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

Wie um alles in der Welt soll ich Operationen wie Addieren, Subtrahieren und Multiplizieren von zweidimensionalen Objekten ausführen (ich nehme an, point2d ist eine Objektstruktur wie{x: 0, y: 0})? Ich fühle mich idiotisch, aber das ist das einzige, was mich davon abhält, diese Monstrosität tatsächlich umzusetzen.

FWIW, ich benutze diese Gleichung, um die Geschwindigkeit einer Entität beim Überqueren der Kurve in einem Spiel zu normalisieren. Wenn Sie einen besseren Weg kennen, das zu tun, bin ich ganz Ohr.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage