/LGC图形渲染/图像处理系列之旋转

400 篇文章 3 订阅
147 篇文章 0 订阅
图像处理系列之旋转
作者: HouSisong
日期: 2009-08-14
本文介绍了图像旋转的原理和公式,并给出了公式的推导过程。
旋转原理和旋转公式

旋转示意图

如果果一个点(x,y)旋转到(x',y'),对应的角度旋转从b到(b+a),那么旋转 公式为:

x' = x * cos(a) - y * sin(a);
y' = x * sin(a) + y * cos(a);

公式的推导过程如下所示:

有:

    tg(b)=y/x                             ----(1)
tg(a+b)=y'/x' ----(2)
x*x + y*y = x'*x' + y'*y' ----(3)

有公式:

    tg(a+b) = ( tg(a)+tg(b) ) / ( 1-tg(a)*tg(b) )  ----(4)

把(1)代入(4)从而消除参数b:

    tg(a)+y/x = y'/x'*( 1-tg(a)*y/x )                ----(5)

由(5)可以得

    x'=y'*(x-y*tg(a))/( x*tg(a)+y )       ----(6)

把(6)代入(3)从而消除参数x',化简后求得:

    y'=x*sin(a)+y*cos(a);                     ----(7)

把(7)代入(6),有:

x'=x*cos(a)-y*sin(a);                     ----(8)

应用

假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后的新的坐标设为(x', y'),x平移rx0,y平移ry0,角度a对应-RotaryAngle , 带入方程(7)、(8)后,得到公式:

    x'= (x - rx0)*cos(RotaryAngle) + (y - ry0)*sin(RotaryAngle) + rx0
y'= =-(x - rx0)*sin(RotaryAngle) + (y - ry0)*cos(RotaryAngle) + ry0

那么,根据新的坐标点求源坐标点的公式为:

    x=(x'- rx0)*cos(RotaryAngle) - (y'- ry0)*sin(RotaryAngle) + rx0 ;
y=(x'- rx0)*sin(RotaryAngle) + (y'- ry0)*cos(RotaryAngle) + ry0 ;

旋转的时候还可以顺便加入x轴和y轴的缩放和平移,而不影响速度,那么完整的 公式为:

  x=(x'- move_x-rx0)/ZoomX*cos(RotaryAngle) - (y'- move_y-ry0)/ZoomY*sin(RotaryAngle) + rx0 ;
y=(x'- move_x-rx0)/ZoomX*sin(RotaryAngle) + (y'- move_y-ry0)/ZoomY*cos(RotaryAngle) + ry0 ;

其中:

  • RotaryAngle为逆时针旋转的角度;
  • ZoomX,ZoomY为x轴y轴的缩放系数(支持负的系数,相当于图像翻转);
  • move_x,move_y为x轴y轴的平移量;
Reference
  1. 任意角度的高质量的快速的图像旋转(上篇)-- 纯软件的任意角度的快速旋转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值