如何围绕某个点旋转顶点?
假设您在 2D 空间中有两个点,您需要将其中一个点旋转 X 度,另一个点充当中心。
float distX = Math.abs( centerX -point2X );
float distY = Math.abs( centerY -point2Y );
float dist = FloatMath.sqrt( distX*distX + distY*distY );
到目前为止,我只是找到了两点之间的距离......任何想法,我应该从哪里去?
假设您在 2D 空间中有两个点,您需要将其中一个点旋转 X 度,另一个点充当中心。
float distX = Math.abs( centerX -point2X );
float distY = Math.abs( centerY -point2Y );
float dist = FloatMath.sqrt( distX*distX + distY*distY );
到目前为止,我只是找到了两点之间的距离......任何想法,我应该从哪里去?
最简单的方法是组合三个转换:
当您解决这一切时,您最终会得到以下变换(其中以弧度为单位的所需旋转角度):x
newX = centerX + (point2x-centerX)*Math.cos(x) - (point2y-centerY)*Math.sin(x);
newY = centerY + (point2x-centerX)*Math.sin(x) + (point2y-centerY)*Math.cos(x);
请注意,这假设顺时针旋转的角度为负(坐标系的标准或右侧方向)。如果不是这种情况,那么您将需要反转涉及 的条款上的符号。x
sin(x)
您需要一个 2-d 旋转矩阵 http://en.wikipedia.org/wiki/Rotation_matrix
您的新观点将是
newX = centerX + ( cosX * (point2X-centerX) + sinX * (point2Y -centerY))
newY = centerY + ( -sinX * (point2X-centerX) + cosX * (point2Y -centerY))
因为您正在顺时针旋转而不是逆时针旋转