矩形旋转,怎么减小误差?

snoopytnc 2003-06-04 04:34:33
我实现矩形旋转的算法如下:(但误差太大)
先计算一个点(x0,y0)的旋转。设矩形中心点坐标为(cx,cy),鼠标位置(mx,my)。
(x0,y0),(mx,my)的角度用sin,cos表示,(x0,y0)旋转的角度就是鼠标滑过的角度。
(x0,y0)旋转之后的角度用和着化积得到。
cos(a1+a2) = cosa1*cosa2 - sina1*sina2 ;
sin(a1+a2) = sina1*cosa1 + cosa1*sina1 ;

static void rotate_point(XPoint *pt ,double cx,double cy , XEvent *event )
{
double x0, y0, x1, y1,mx,my;
double Cos0, Cos1, Sin0, Sin1, Cos2, Sin2, r0, r1;

x0 = pt -> x;
y0 = pt -> y;

mx = event->xbutton.x ;
my = event->xbutton.y ;

r1 = (double)sqrt ((mx - cx) * (mx - cx) + (my - cy) * (my - cy));
Cos0 = (double)(mx - cx)/r1;
Sin0 = (double)(my - cy)/r1;

r0 = (double)sqrt ((x0 - cx) * (x0 - cx) + (y0 - cy) * (y0 - cy));
Cos1 = (double)(x0 - cx)/r0;
Sin1 = (double)(y0 - cy)/r0;

Cos2 = (double) (Cos0 * Cos1 - Sin0 * Sin1);
Sin2 = (double) (Cos0 * Sin1 + Cos1 * Sin0);

x1 = r0 * Cos2 + cx;
y1 = r0 * Sin2 + cy;

pt -> x = gxround( x1 ) ;
pt -> y = gxround( y1 ) ;

}

这样算出来误差很大,矩形转到最后成了梯形或其它图形了。
请问高手,怎样减少误差。
...全文
41 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧