2010-03-12 9 views
9

Ich habe einen Punkt in einem Rechteck, das ich um einen beliebigen Grad drehen muss und finde das x y des Punktes. Wie kann ich das mit Javascript tun?Drehpunkt im Rechteck

Unterhalb der x, y wäre etwas wie 1,3 und nachdem ich 90 in die Methode übergeben, wird 3,1 zurückgeben.

|-------------| 
| *   | 
|    | 
|    | 
|-------------| 
_____ 
| *| 
|  | 
|  | 
|  | 
|  | 
_____ 

|-------------| 
|    | 
|    | 
|   *| 
|-------------| 
_____ 
|  | 
|  | 
|  | 
|  | 
|* | 
_____ 

Grundsätzlich Ich suche den Mut zu dieser Methode

function Rotate(pointX,pointY,rectWidth,rectHeight,angle){ 
    /*magic*/  
    return {newX:x,newY:y}; 
} 

Antwort

9

Dies sollte es tun:

function Rotate(pointX, pointY, rectWidth, rectHeight, angle) { 
    // convert angle to radians 
    angle = angle * Math.PI/180.0 
    // calculate center of rectangle 
    var centerX = rectWidth/2.0; 
    var centerY = rectHeight/2.0; 
    // get coordinates relative to center 
    var dx = pointX - centerX; 
    var dy = pointY - centerY; 
    // calculate angle and distance 
    var a = Math.atan2(dy, dx); 
    var dist = Math.sqrt(dx * dx + dy * dy); 
    // calculate new angle 
    var a2 = a + angle; 
    // calculate new coordinates 
    var dx2 = Math.cos(a2) * dist; 
    var dy2 = Math.sin(a2) * dist; 
    // return coordinates relative to top left corner 
    return { newX: dx2 + centerX, newY: dy2 + centerY }; 
} 
+0

Ihre Math vergessen. auf atan2, cos und sin, aber das ist perfekt !! – Dested

+0

@Destierte: Danke. Korrigiert den Code. – Guffa

2
newX = Math.cos(angle) * pointX - Math.sin(angle) * pointY; 
newY = Math.sin(angle) * pointX + Math.cos(angle) * pointY; 

Stellen Sie sicher, die Koordinaten relativ zur Dreh Herkunft angeben !

(Überprüfen Sie nicht die Syntax genau, aber die Mathematik basiert auf einer Rotationsmatrix)