2010-03-12 4 views
9

У меня есть точка в прямоугольнике, которую мне нужно повернуть произвольной степенью и найти x y точки. Как это сделать, используя javascript.Повернуть точку в прямоугольнике

Ниже x, y будет что-то вроде 1,3, и после того, как я пройду 90, метод вернет 3,1.

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

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

В основном я ищу кишки этого метод

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

ответ

9

Это следует сделать это:

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

Ваш забытый математический. на atan2, cos и sin, но это прекрасно! – Dested

+0

@Dested: Спасибо. Исправлен код. – Guffa

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

Обязательно укажите координаты относительно поворота координат !

(Не проверял синтаксис точно, но математика основана на матрице вращения)