解释旋转公式推导得来

rerli 2003-09-05 12:39:13
假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x0, y0)绕其中心(xcenter,ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为:
xcenter = (right - left + 1) / 2 + left;
ycenter = (bottom - top + 1) / 2 + top;
x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;
y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;

我不明白是怎么推出来的。请老师们帮帮我,给分100。
...全文
94 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gleaf 2003-09-05
先解释关于中心点的计算:
对于Xcenter ,它等于左上角的位置加上图像矩形的宽的一半,所以应该是
xcenter = left + (right - left) /2
至于为什么要加上1,那是因为运算的结果被限定在整数集合内。
简单的说,如果(right-left) = 5 那么一般的语言 5/2 = 2, (5+1)/2 = 3;
如果(right-left) = 4 那么一般的语言 4/2 = 2, (4+1)/2 = 2;
ycenter 同样。

至于旋转以后的坐标,可以通过两次变换坐标系求出来。就是先把坐标原点变换到图像矩形中心,旋转完以后在变换回来。这个就不详细说明了。下面是旋转的过程:
如果果一个点(x1,y1)旋转到(x2,y2),对应的角度旋转从θ1到θ1+θ2那么很显然:
sinθ1=y1/sqrt(x1*x1+ y1*y1)
cosθ1=x1/sqrt(x1*x1+ y1*y1)
sinθ1=y2/sqrt(x2*x2+ y2*y2)
cosθ2=x2/sqrt(x2*x2+ y2*y2)

注意到 x1*x1 + y1*y1 = x2*x2 + y2*y2
那么
x2=x1*cos(θ1+θ2)/cosθ1
y2=y2*sin(θ1+θ2)/sinθ1
然后按照两角和与差的公式展开,运算就可以得出结论啦。

抱歉两角和与差测公式我记不清了,只能推导到这一步了。

回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2003-09-05 12:39
社区公告

让您成为最强悍的C#开发者