Ich versuche, benutzerdefinierte Komponenten in Android mit Surfaceview und Leinwandzeichnung zu erstellen. Die Komponenten sind durch Berührung verstellbar und drehbar. Sie können eine Bildansicht erstellen, deren obere, rechte, untere und linke Ränder skalierbar sind, indem Sie die gewünschte Kante berühren und ziehen. Ich benutze RectF
, um die Grenzen der Komponente zu behalten, für die Rotation verwende ich canvas.rotate(angle, bounds.centerX(),bounds.centerY())
Methode. Das Problem besteht darin, dass beim Verändern der Oberkante die Let-, Right- und Bottom-Kanten fixiert sein sollten und ich es nicht beheben kann, wenn der Drehwinkel nicht 0 Grad ist. Ich brauche eine mathematische Lösung, um die X, Y-Koordinaten eines gedrehten Rechtecks in Bezug auf die Grenzen des tatsächlichen Rechtecks herauszufinden.Rectangle Koordinaten in Bezug auf den Rotationswinkel
Ich kann es mit Hilfe einiger Bilder erklären. Die folgende Abbildung zeigt zwei Rechtecke, deren Grenzen ebenfalls bekannt sind und in entsprechenden Farben angezeigt werden. Betrachten Sie das Green Rect als Anfangsbegrenzung der Komponenten, d. gedreht um -45 Grad, Zentrum ist (10,10). würde nun wieder das Größe Oberkante des Rechtecks und angezeigt in nächster Abbildung 2.
Aus der Figur 2 ist ersichtlich, daß die Y-Position der gedrehten bis 4 aus 6 reduziert wird Rechteck wird auch in rosa Farbe angezeigt. Denken Sie daran, ich Ändern der Größe mache, während die Komponente bei Drehwinkel -45 Grad ist, so beim Ziehen Oberkante Rechtecks links, rechts und unten Positionen nicht geändert werden soll. So die Abbildung 2 Pink Rechteck sollte links, rechts und unten Koordinaten gleiche wie Abbildung 1 der grünen Rechteck. Vergleich der erhaltenen und erwarteten Rechteck ist in Abbildung 3
gezeigtIn 3 ist die gelbe Farbe Rechteck ist die erwartete/Erforderlich löschte. Die erhaltene Rechteck rosae Farbe nach oben verschoben wird, im Vergleich zu dem grünen Rechteck gedreht und variiert abhängig von dem Drehwinkel.
- Ich habe Drehwinkel = -45 Grad
- Bounds von Actual (nicht re-sized) Rechteck.
- Grenzen des tatsächlichen (nicht redimensionierten) Rechtecks bei Rotation = -45 Grad.
- Grenzen von Re-sized-Rechteck.
- Bounds von Re-sized Rechteck bei Rotation = -45 Grad.
Wie berechne ich die Bounds/Mitte des gelben Rechtecks. Damit ich die Größenanpassung meiner Komponenten korrekt umsetzen kann? Lassen Sie mich wissen, gibt es irgendeine Mathematik, die angewendet werden kann?
Die erforderlichen Punkte/Koordinaten als rote Farbe Kreise in Abbildung 3.
Gerade drehen Punkte am Ende, Grundformeln sind: x_ = x * cos (Winkel) - y * sin (Winkel); y_ = y * sin (Winkel) + y * cos (Winkel); http://en.wikipedia.org/wiki/Rotation_(mathematik) – user1410657