这是数学题啊....
Rotate = function(Source,Angle)//Angle为正时逆时针转动, 单位为弧度{
var A,R
A = Math.atan2(Source.Y,Source.X)//atan2自带坐标系识别, 注意X,Y的顺序
A += Angle//旋转
R = Math.sqrt(Source.X * Source.X + Source.Y * Source.Y)//半径
return {
X : Math.cos(A) * R,
Y : Math.sin(A) * R
}
}
Rotate({X : 0,Y : 4},-Math.PI / 4)
注意, 由於牵扯浮点运算, 所以你如果调用
Rotate({X : 0,Y : 4},Math.PI / 2)
返回可能会是{X: -4, Y: 4.898425415289509e-16}
Y很小但不等於0
当然如果用矩阵变换也是可以写的..
根据我的理解,你这是给了两个坐标,求这个向量和水平线的角度么?
其实就是一个数学问题吧?
function angle(start,end){var diff_x = end.x - start.x,
diff_y = end.y - start.y
//返回角度,不是弧度
return 360*Math.atan(diff_y/diff_x)/(2*Math.PI)
}
那么执行
angle({x:0,y:0},{x:1,y:1})就会返回45(度)