随笔 - 3  文章 - 2  trackbacks - 0
<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

 

double CCarNaviView::CalculateRotateAngle(CPoint pntBegin,CPoint pntNext)
{
    CPoint pntFirst(pntBegin);
    CPoint pntSecond(pntNext);

    
double dRotateAngle = atan2(fabs(pntBegin.x-pntNext.x),fabs(pntBegin.y-pntNext.y));
 
    
//如果下一点的横坐标大于前一点(在第一和第四象限)
    if (pntNext.x>=pntFirst.x)
    
{
        
//在第一象限(0<=dRotateAngle<=90)
        if (pntNext.y>=pntFirst.y)
        
{
            
//不做任何处理
            dRotateAngle=dRotateAngle;
        }

        
else
        
{
            dRotateAngle
=PI-dRotateAngle;
        }

    }

    
else//(在第二和第三象限)
    {
        
//第二象限
        if (pntNext.y>=pntFirst.y)
        
{
            dRotateAngle
=2*PI-dRotateAngle;
        }

        
else//第三象限
        {
            dRotateAngle
=PI+dRotateAngle;
        }

    }

    dRotateAngle 
= dRotateAngle * 180 / PI;
    
return dRotateAngle;
}

posted on 2012-08-14 20:28 寰子 阅读(1456) 评论(1)  编辑 收藏 引用 所属分类: Graphic Algorithm

FeedBack:
# re: 同一坐标系中,由任意两点计算旋转角度. 2014-05-24 16:44 水煮糊涂
//第二象限
if (pntNext.y>=pntFirst.y)
{
dRotateAngle=2*PI-dRotateAngle;
}

应改为
//第二象限
if (pntNext.y>=pntFirst.y)
{
dRotateAngle=PI-dRotateAngle;
}

第四象限错误应改为
//在第一象限(0<=dRotateAngle<=90)
if (pntNext.y>=pntFirst.y)
{
//不做任何处理
dRotateAngle=dRotateAngle;
}
else
{
dRotateAngle=2*PI-dRotateAngle;
}  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理