2D旋转的数据基础
最近看Direct3d 游戏编程基础(二版),附录c数学入门-3d中的点中"将一点按逆时针旋转θ弧度,可使用下面的公式:
x′ = x * cos θ – y * sin θ; y′ = y * cos θ + x * sin θ",没有推倒,我又看忘了的公式,最后在http://dev.yesky.com/221/2504221.shtml上"在J2ME/MIDP中实现图像旋转"解释不错,留个纪念.先给出两角和公式:
sin(A+B)=sinAcosB+cosAsinB | sin(A-B)=sinAcosB-sinBcosA | ||
cos(A+B)=cosAcosB-sinAsinB | cos(A-B)=cosAcosB+sinAsinB |
考虑笛卡儿直角坐标系中单个点旋转的情况。如图二示,这里点P(x,y)到原点O绕O点逆时针旋转角度θ后到点P′(x′,y′)。由三角函数的几何意义,有x = r*cos α ,y = r*si n α和x′ = r*cos(α +θ) , y′ = r*sin(α + θ),推出:
x′ = x * cos θ – y * sin θ y′ = y * cos θ + x * sin θ |
当把旋转点一般化为Q(x0,y0),得到:
x′ = x0 + (x - x0) cos θ - (y - y0) sin θ y′ = y0 + (y - y0) cos θ + (x - x0) sin θ |
在开发时,我们使用设备坐标系,它以屏幕的左上角为坐标原点,y轴方向向下。此时,我们不妨视θ为饶旋转点顺时针旋转的角度,这样,上面的公式依然成立。
![]() 图二 2D点的旋转 |