1、围绕原点的旋转
在直角坐标中,有p(x, y),直线op长度为r,直线op和x轴正向夹角为a。直线op围绕原点做逆时针方向b度的旋转,到达p’ (s,t),如下图。
s = r cos(a + b) = r cos(a)cos(b) – r sin(a)sin(b) (1.1)
t = r sin(a + b) = r sin(a)cos(b) + r cos(a)sin(b) (1.2)
其中 x = r cos(a) , y = r sin(a)
代入(1.1), (1.2) ,
s = x cos(b) – y sin(b) (1.3)
t = x sin(b) + y cos(b) (1.4)
用行列式表达如下:
代码如下
#include <MATH.H>
void vRotationTransform(double dX, double dY, double dAngle, double &dbNewX, double &dbNewY)
{
dbNewX = dX * cos(dAngle) - dY * sin(dAngle);
dbNewY = dX * sin(dAngle) + dY * cos(dAngle);
}
2、坐标系的旋转
在原坐标系xoy中, 绕原点沿逆时针方向旋转θ度,变成座标系 sot。
设有某点p,在原坐标系中的坐标为 (x, y), 旋转后的新坐标为(s, t)。
oa = y sin(θ) (2.1)
as = x cos(θ) (2.2)
综合(2.1),(2.2) 2式
s = os = oa + as = x cos(θ) + y sin(θ)
t = ot = ay – by = y cos(θ) – x sin(θ)
用行列式表达如下:
看不懂的话,换个图。 而您一旦用以下这图解方法,随时眼见显然,再也不会搞错。