Standardmäßig verwendet die Rotationsmatrix den Ursprungspunkt als Mittelpunkt der Rotation. Um einen beliebigen Punkt zu drehen, müssen Sie den Abstand zum Ursprung mithilfe einer Translationsmatrix subtrahieren, die Rotation durchführen und dann zurück übersetzen. Aber das scheint mir nicht so gut zu gehen. Ich habe den folgenden Code (davon ausgehen, mein Ziel ist 100x100 mit einem Zentrum bei 50,50):Rotationsmatrix über beliebigen Punkt
t = IDENTITY;
t = translate(t, -50, -50);
t = rotate(t, theta);
t = translate(t, 50, 50);
Leider, wenn ich diese Matrix t
auf mein Objekt verwandelt anwenden, wird das Objekt falsch positioniert.
ich eine schnelle jsfiddle implementiert haben, mein Problem zu demonstrieren: http://jsfiddle.net/9M3uy/67/
Im JSFiddle drehte sich die rote Quadrat ist, wo die Rotation (mit freundlicher Genehmigung von der CSS3 gebaut in transformations Herkunft) am Ende haben sollte, und die blau gedrehtes Quadrat ist, wo meine Berechnung endet (das Grün wäre das ursprüngliche nicht gedrehte Quadrat gewesen).
Irgendwelche Ideen? Versteh ich einfach nicht, wie Übersetzen, Drehen, Übersetzen der Mechanik funktioniert oder mache ich etwas schrecklich falsch?
Ich kann das Grün nicht sehen ... –
Sie müssen Chrome oder Safari verwenden. Ich habe den JSFiddle so aktualisiert, dass er das erforderliche CSS für alle Browser enthält. – syazdani
Ja! Aber es scheint, dass Sie die Antwort gefunden haben! Ich kam zu spät –