Drehen Sie das Zifferblatt über einem halbkreisförmigen Bild (nördliche Hemisphäre) als Hintergrund. Bereich könnte 0 – 180 Grad sein. Bei der Eingabe in die Methode, die die Canvas-Transformation durchführt, würde sich das Zifferblatt drehen und über dem übereinstimmenden Wert anhalten. Folgendes habe ich versucht, basierend auf der Hilfe und dem von phrogz weitergegebenen Beispiel
Verwenden von HTML5 Canvas – Bild um einen beliebigen Punkt drehen
Abhijit
Phrogz
Im Allgemeinen möchten Sie Folgendes tun:
- Verwandeln Sie den Kontext in den Punkt auf der Leinwand, um den sich das Objekt drehen soll.
- Drehen Sie den Kontext.
- Transformieren Sie den Kontext um den negativen Versatz innerhalb des Objekts für das Rotationszentrum.
- Zeichnen Sie das Objekt bei 0,0.
In Code:
ctx.save();
ctx.translate( canvasRotationCenterX, canvasRotationCenterY );
ctx.rotate( rotationAmountInRadians );
ctx.translate( -objectRotationCenterX, -objectRotationCenterY );
ctx.drawImage( myImageOrCanvas, 0, 0 );
ctx.restore();
Hier ist ein Arbeitsbeispiel zeigt dies in Aktion. (Die Mathematik für die Drehung wurde nur experimentell gehackt, um einen Schwungbetrag und einen Versatz im Bogenmaß zu finden, der auf das schnell skizzierte Messgerät passt.)
Wie ersichtlich ist, können Sie die ersetzen translate
Rufen Sie in Schritt 3 oben mit Offsets zu auf drawImage()
Anruf. Beispielsweise:
ctx.drawImage( myImageOrCanvas, -objectRotationCenterX, -objectRotationCenterY );
Die Verwendung der Kontextübersetzung wird empfohlen, wenn Sie mehrere Objekte an derselben Stelle zeichnen müssen.
-
Danke für die schnelle Hilfe und auch die Demo. 🙂
– Abhijit
10. Januar 11 um 19:49 Uhr
-
Weitere Informationen finden Sie in dieser (doppelten) Frage und Antwort: HTML5 Canvas
drawImage
in einem Winkel.– Phrogz
10. Januar 11 um 20:53 Uhr
-
Immer noch hängen, wenn es darum geht, die Parameter in der Methode „rotate()“ zu ersetzen, um Feeds aus der Datenstruktur einzubinden.
– Abhijit
11. Januar 11 um 16:43 Uhr
-
@Ab Vielleicht erhalten Sie Abschlüsse und geben sie weiter
rotate()
ohne sie zuerst in Radiant umzuwandeln? Wenn ja, multipliziere mitMath.PI/180
. Wenn das nicht hilft, bearbeiten Sie Ihre Frage mit einem abgespeckten Testfall, der Ihren tatsächlichen Code zeigt, und wir können von dort aus weitermachen.– Phrogz
11. Januar 11 um 16:57 Uhr
-
Vielen Dank, ich bin fast da 🙂
– Abhijit
12. Januar 11 um 22:40 Uhr
.
mögliches Duplikat von Canvas aus dem unteren Bildwinkel in der Mitte drehen?
– Gabriele Petrioli
10. Januar 11 um 18:02 Uhr