Dies ist relativ einfach, aber ein bisschen schwer zu erklären, da Sie uns den Weg nicht gegeben haben Sie Ihre Ellipse darstellen. Es gibt so viele Möglichkeiten, es zu tun.
Wie auch immer, das allgemeine Prinzip geht so: Sie können nicht die Achse ausgerichtete Grenze Box direkt berechnen. Sie können jedoch die Extrema der Ellipse in x und y als Punkte im 2D-Raum berechnen.
Dafür genügt es, die Gleichung x (t) = ellipse_equation (t) und y (t) = ellipse_equation (t) zu nehmen. Holen Sie sich die erste Ableitung davon und lösen Sie es für seine Wurzel. Da wir es mit Ellipsen zu tun haben, die auf Trigonometrie basieren, ist das einfach. Sie sollten mit einer Gleichung enden, die entweder die Wurzeln über Atan, Acos oder Asin bekommt.
Tipp: Um Ihren Code zu überprüfen, versuchen Sie es mit einer nicht gedrehten Ellipse: Sie sollten Wurzeln bei 0, Pi/2, Pi und 3 * Pi/2 bekommen.
Machen Sie das für jede Achse (x und y). Sie erhalten höchstens vier Wurzeln (weniger, wenn Ihre Ellipse degeneriert ist, z. B. ist einer der Radien Null). Ermitteln Sie die Positionen an den Wurzeln und Sie erhalten alle Extrempunkte der Ellipse.
Jetzt sind Sie fast da. Das Abrufen der Begrenzungsbox der Ellipse ist so einfach wie das Scannen dieser vier Punkte nach xmin, xmax, ymin und ymax.
BTW - wenn Sie Probleme haben, die Gleichung Ihrer Ellipse zu finden: versuchen Sie, es auf den Fall zu reduzieren, dass Sie eine Achse ausgerichtete Ellipse mit einem Zentrum, zwei Radien und einem Rotationswinkel um das Zentrum haben.
Wenn Sie das tun, so ergibt sich folgende Gleichung:
// the ellipse unrotated:
temp_x (t) = radius.x * cos(t);
temp_y (t) = radius.y = sin(t);
// the ellipse with rotation applied:
x(t) = temp_x(t) * cos(angle) - temp_y(t) * sin(angle) + center.x;
y(t) = temp_x(t) * sin(angle) + temp_y(t) * cos(angle) + center.y;
Danke. Das funktioniert, außer Sie haben einen Tippfehler in Gleichung zwei. Das Minuszeichen sollte ein Plus sein. –
Fixed, scheint ich die Lösung für tan (t) auf [2] auch durchgegangen zu sein, also habe ich das auch behoben. Hoffentlich hast du alle meine Fehler entdeckt - es ist alles auf die Rückseite eines Umschlags gekritzelt ..;) –
Ich denke, es gibt einen weiteren Fehler, in dem Beispiel: der erste t-Wert für x ist -0,4636, sollte nicht der zweite -3,6052 sein (entspricht -0,4636 - Pi)? – brianmearns