2010-03-12 130 views
9

我在矩形中有一个点,需要旋转任意的角度并找到点的xy。我如何使用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和罪,但这是完美的! – Dested 2010-03-12 12:47:51

+0

@Dested:谢谢。更正了代码。 – Guffa 2010-03-12 13:23:02

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

确保指定相对于旋转原点的坐标!

(还没有检查句法,但数学是基于旋转矩阵)