Berechnen der Bounding-box-Koordinaten aus einem gedrehten Rechteck
Habe ich die Koordinaten der linken oberen Punkt des Rechtecks sowie dessen Breite, Höhe und Drehung von 0 bis 180 und -0 -180.
Ich versuche die begrenzenden Koordinaten der eigentliche Rahmen um das Rechteck.
Was ist Sie eine einfache Möglichkeit, die Berechnung der Koordinaten der bounding-box
- Min y, max y, min x, max x?
Den Einen Punkt nicht immer auf der min y gebunden, es kann überall sein.
Kann ich nutzen-matrix der Transformation toolkit in as3, wenn nötig.
Bild (Image) nicht sichtbar ist .. (Das Bild sagt : Klicken Sie auf und entdecken Imageshack) !!!
OK, mein bad, ich Frage mich, ob ich es wieder aus dem google-Archiv oder so etwas.
Was ist der Punkt?
OK, mein bad, ich Frage mich, ob ich es wieder aus dem google-Archiv oder so etwas.
Was ist der Punkt?
InformationsquelleAutor coulix | 2009-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
min_x
max_x
(min_x,min_y), (min_x,max_y), (max_x,max_y), (max_x,min_y)
AFAIK, es gibt keine königliche Straße ist, das Sie es viel schneller.
Wenn Sie sich Fragen, wie eine Transformation der Koordinaten, versuchen Sie:
wo (x0,y0) ist das Zentrum, um das Sie rotieren. Sie müssen möglicherweise basteln mit diesem je nach trigonometrischen Funktionen (erwarten Sie Grad oder Radiant) der Sinn /Zeichen Ihrer Koordinatensystem gegenüber, wie Sie angeben, Winkel, etc.
Tatsächlich, aufgrund der Symmetrie, die Sie transformieren müssen nur 2 Ecken, und wenn Sie ein wenig zusätzliche dachte, es ist nur 1 Ecke zu drehen.
Das ist gültig nur im Fall, wo Sie drehen sich um den Mittelpunkt des Rechtecks.
dies ist die wahre. Dies ist jedoch, wie die meisten von der Zeichnung Programme tun es.
die Gleichung, die Sie erwähnen, für x2 sein sollte, x0+(x-x0)*cos(theta)- (y-y0)*sin(theta) statt x0+(x-x0)*cos(theta)+(y-y0)*sin(theta), bin ich Recht ?
InformationsquelleAutor MarkusQ
Ich erkennen, dass Sie für Fragen ActionScript-aber nur, falls irgendjemand hier auf der Suche für iOS-oder OS-X zu beantworten, ist diese:
Wenn Ihr OS bietet, um all die harte Arbeit für Sie, lassen Sie es! 🙂
Swift:
Wollte noch hinzufügen, dass der Winkel in Bogenmaß, nicht in Grad. Können sparen Sie einige Zeit. 😉
Antwort aktualisiert Bogenmaß. Danke!
InformationsquelleAutor Olie
Die beschriebene Methode von MarkusQ perfekt funktioniert, aber Bedenken Sie, dass Sie nicht brauchen, um zu transformieren, werden die anderen drei Ecken, wenn Sie Punkt A bereits.
Eine alternative Methode, die effizienter ist, ist zu prüfen, welche Quadranten Sie Ihre Rotationswinkel und dann einfach berechnen Sie die Antwort direkt. Dies ist effizienter, da Sie nur eine worst-case von zwei if-Anweisungen (überprüfung der Winkel), während in dem anderen Ansatz hat ein schlimmsten Fall der zwölf (6) für jede Komponente bei der Kontrolle der anderen drei Ecken zu sehen, wenn Sie größer als der aktuelle max oder kleiner als der aktuelle min), denke ich.
Den grundlegenden Algorithmus, der verwendet nichts anderes als eine Reihe von Anwendungen des Satz des Pythagoras, wird unten angezeigt. Ich habe bezeichnet den Rotationswinkel von theta und äußerte die Prüfung in Grad, wie es pseudo-code.
Diesem Ansatz wird davon ausgegangen, dass Sie haben, was Sie sagen, Sie haben also den Punkt A, und einen Wert für theta, der sich in den Bereich [-180, 180]. Ich habe auch angenommen, dass die theta-Zunahmen im Uhrzeigersinn, wie das ist, was Sie das Rechteck, das gedreht ist, um 30 Grad in dein Diagramm scheint zu zeigen, die Sie verwenden, ich war nicht sicher, was das Teil auf der rechten Seite wurde versucht, zu bezeichnen. Wenn dies der falsche Weg, um dann nur die swap-symmetrischen Klauseln und auch das Schild von den st-Bedingungen.
Ich weiß, das ist sehr alt, aber es ist ein Erster Treffer bei google so, hier werde ich beachten: Nur für die Skala der h-und w vor und es sollte funktionieren. Diese Antwort ist derzeit mein Favorit für dieses problem, da bricht es, die Berechnung in kleine Stücke so gut. 2 Filialen und mit einigen NEON-Magie in ios 4-6 Vorgänge oder weniger, je nachdem wie tricksy, die Sie erhalten.
InformationsquelleAutor Troubadour
InformationsquelleAutor bajie
wenn Sie mithilfe von GDI+ , die Sie erstellen können eine neue GrpaphicsPath -> Fügen Sie keine Punkte oder Formen -> Anwenden drehen transformation -> verwenden GraphicsPath.GetBounds() und wird es wieder ein Rechteck, die Grenzen Ihrer gedrehten Form.
(Bearbeiten) VB.Net Beispiel
End Sub
InformationsquelleAutor Bishoy
Obwohl Code-Guru, erklärte der GetBounds () - Methode, ich habe bemerkt, die Frage ist tagged as3, flex, also hier ist ein as3-snippet veranschaulicht die Idee.
Ich bemerkte, dass es zwei Methoden, die scheinen, die gleiche Sache zu tun: getBounds() und getRect()
InformationsquelleAutor George Profenza
InformationsquelleAutor Nick Bilyk
Anwenden der rotationsmatrix um die Ecke Punkten. Dann verwenden Sie die minimum - /maximum-bzw. des erhaltenen x,y-Koordinaten zu definieren, Ihre neue bounding box.
InformationsquelleAutor ypnos
Hier sind drei Funktionen von meinem open-source-Bibliotheken. Die Funktionen sind vollständig getestet in Java, aber die Formeln können leicht übersetzt werden zu jeder Sprache.
Die Signaturen sind:
public static float getAngleFromPoint(letzten Punkt, dem Mittelpunkt, Endpunkt touchPoint)
public static float getTwoFingerDistance(float firstTouchX, float firstTouchY, float secondTouchX, float secondTouchY)
Punkt getPointFromAngle(final double angle, final double radius)
Dieser Lösung wird davon ausgegangen, dass die pixel-Dichte ist gleichmäßig verteilt.
Vor dem drehen des Objekts führen Sie die folgenden:
Verwenden getAngleFromPoint zur Berechnung der Winkel von der Mitte der oberen rechten Ecke (können sagen, dieser liefert 20 Grad), was bedeutet, dass die upp linken Ecke ist -20 Grad und 340 Grad.
Verwenden Sie die getTwoFingerDistance die Rückkehr der Diagonale Abstand zwischen dem Mittelpunkt und der rechten oberen Ecke (sollte dieser Abstand obvoiusly werden die gleichen für alle Ecken Dieser Abstand wird bei der nächsten Berechnung).
Können nun sagen, wir drehen das Objekt im Uhrzeigersinn um 30 Grad. Wir wissen jetzt, dass die oberen rechten Ecke werden müssen, bei 50 Grad, und die Obere linken Ecke ist mit 10 Grad.
Sollten Sie nun in der Lage sein zu verwenden, die getPointFromAngle Funktion auf der oberen linken und oberen rechten Ecke. mit dem radius zurück aus Schritt 2.
Die X-position, multipliziert mit 2 aus der oberen rechten Ecke sollten Sie die neue Breite und die Y-position mal 2 von der oberen linken Ecke geben sollte, der die neue Höhe.
Diese oben genannten 4 Schritte sollten gesetzt werden zu Bedingungen, basierend auf, wie weit Sie sich gedreht haben Ihr Objekt andere weisen, die Sie zurückgeben kann die Höhe als die Breite und die Breite als die Höhe.
Bare daran, die Winkel-Funktionen ausgedrückt werden, in der Faktoren von 0-1, anstatt 0-360 (einfach multiplizieren oder dividieren von 360 gegebenenfalls):
//Wird ein Winkel von zwei Punkten ausgedrückt als ein Faktor 0 -1 (0 0/360, 0.25 als 90 Grad etc)
//Misst die Diagonale Entfernung zwischen zwei Punkten
//XY-Koordinaten aus einem Winkel in einem gegebenen radius (Der Winkel, ausgedrückt in einem Faktor 0-1 0 0/360 Grad und 0,75 als 270 etc)
Diese code-Schnipsel sind aus meiner open-source-Bibliotheken: https://bitbucket.org/warwick/hgdialrepo und https://bitbucket.org/warwick/hacergestov2.
Die eine ist eine Geste-Bibliothek für Android-und der andere ist ein dial-Steuerung für Android. Es ist auch ein OpenGLES 2.0-Implementierung von der regler: https://bitbucket.org/warwick/hggldial
InformationsquelleAutor user2288580
Ich bin nicht sicher, ob ich verstehe, aber eine zusammengesetzte transformation matrix geben Sie die neuen Koordinaten für alle Punkte betrifft. Wenn Sie denken, dass das Rechteck kann überschwappen der imagable Bereich post-transformation einen Beschneidungspfad anwenden.
Den Fall, Sie sind nicht vertraut mit der genauen definition der Matrizen, werfen Sie einen Blick hier.
InformationsquelleAutor dirkgently
Ich verwendet-Region für das Erste drehen des Rechtecks, und verwenden Sie dann gedreht region zu erkennen, Rechteck
nun zu erkennen, dass Rechteck
InformationsquelleAutor Abdulrehman