我正在创建一个游戏,通过创建围绕半径的点来绘制一系列多边形。
稍后我旋转形状,我需要根据旋转计算点的新位置(X,Y)。我有每个点的旧XY,形状中心的XY,形状半径和旋转。
看看我的问题图表。
答案 0 :(得分:3)
应该可以为此使用矩阵变换,但您也可以手动执行: http://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/2drota.htm
所以基本上;
newX = initialX * Math.cos(angle) - initialY * Math.sin(angle);
newY = initialY * Math.cos(angle) + initialX * Math.sin(angle);
//Angle is in radians btw
这假设初始X / Y相对于旋转中心,因此您必须在开始之前减去中心点,然后在计算后再次添加它以正确放置它。
希望这有帮助!
答案 1 :(得分:1)
对于每个点,请执行:
alpha = arctan2(x, y)
len = sqrt(x^2 + y^2)
newX = len * cos(alpha + rotation)
newy = len * sin(alpha + rotation)
原始[x,y]和新[newX,newY]坐标都相对于旋转中心。如果你的原始[x,y]是绝对的,你必须首先计算相对:
x = xAbs - xCenter
y = yAbs - yCenter
如果x = 0,请确保您的arctan2函数提供PI / 2或-PI / 2的结果。原始arctan函数不允许x = 0。