2010-03-12 19 views
9

Tengo un punto en un rectángulo que necesito para girar un grado arbitrario y encontrar la x y del punto. ¿Cómo puedo hacer esto usando javascript?Rotar punto en el rectángulo

Por debajo de la x, y sería algo así como 1,3 y después de pasar 90 en el método devolverá 3,1.

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

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

Básicamente, estoy buscando el valor de este método

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

Respuesta

9

Esto debe hacerlo:

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

Su olvidó la matemáticas. en atan2, cos y pecado, ¡pero esto es perfecto! – Dested

+0

@Dested: Gracias. Corregido el código. – Guffa

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

Asegúrese de especificar las coordenadas relativas al origen de rotación !

(no ha comprobado la sintaxis exactamente, pero la matemática se basa en una matriz de rotación)

Cuestiones relacionadas