xocoder's game development base
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 3 文章 - 2 trackbacks - 0
<
2012年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
Algorithm(1)
Graphic Algorithm(1)
Life
The C++ programming language(1)
随笔档案
2012年8月 (3)
搜索
最新评论
1. re: 同一坐标系中,由任意两点计算旋转角度.
评论内容较长,点击标题查看
--水煮糊涂
2. re: 各种字符串Hash函数比较
好东西,
这个得收藏
--天下
阅读排行榜
1. 同一坐标系中,由任意两点计算旋转角度.(1456)
2. stdext::hash_map使用字符串key(427)
3. 各种字符串Hash函数比较(355)
评论排行榜
1. 同一坐标系中,由任意两点计算旋转角度.(1)
2. 各种字符串Hash函数比较(1)
3. stdext::hash_map使用字符串key(0)
同一坐标系中,由任意两点计算旋转角度.
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;
}
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理