2D中如何判断一点在另一个点的那个方位
来源:互联网 发布:js导出excel表格插件 编辑:程序博客网 时间:2024/06/07 07:12
做android游戏方向键盘,需要根据两个点,判断方向,根据楼主博文受益匪浅!
在工作中经常遇到判断一个点在另一个点的那个方位的问题,如下图,这里需要确定p2在p1的那个方位,也就是求p2相对于p1落在区域1,2,3,4那个中,注意此处p1不是坐标原点,坐标原点在屏幕的左上角(此处为屏幕坐标)。这个问题的解决方法有很多,可以使用向量夹角来做,使用该夹角的方法涉及到向量的乘除,速度上会有影响。此处给出的方法只需判断点的坐标值即可。
具体算法描述如下:
1.将p1,p2转换为以p1为坐标原点,也即平移坐标系。上图给出的就是转换后的坐标系
2.由上图可以看出:
区域1中有:|x| > |y|, x > 0
区域2中有:|x| < |y|, y < 0
区域3中有:|x| > |y|, x < 0
区域4中有:|x| < |y|, y > 0
代码如下:
- bool GetDirect(
- POINT p1,
- POINT p2,
- int& nRegion)
- {
- float fDis = (float)sqrt((double)((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y)));
- if (fDis < 0.001)
- {
- // 亮点重合
- nRegion = 0;
- return false;
- }
- // 将p2转换为以p1为坐标中心的坐标系中
- p2.x -= p1.x;
- p2.y -= p1.y;
- if (abs(p2.x) > abs(p2.y) && p2.x > 0)
- {
- nRegion = 1;
- }
- else if (abs(p2.x) > abs(p2.y) && p2.x < 0)
- {
- nRegion = 3;
- }
- else if (abs(p2.x) < abs(p2.y) && p2.y < 0)
- {
- nRegion = 2;
- }
- else if (abs(p2.x) < abs(p2.y) && p2.y > 0)
- {
- nRegion = 4;
- }
- return true;
- }
总结:通过该方法可以判断其它区域的情况,只需将判断条件修改一下即可
转自:http://blog.csdn.net/rabbit729/article/details/4424929
- 2D中如何判断一点在另一个点的那个方位
- 2D中如何判断一点在另一个点的那个方位
- 两个点已知一个点的方向,判断另一个点在这个的方位(左前/右后)
- 如何在Ubuntu QML应用中判断应用的方位(landscape或portrait)
- Unity中判断目标在自己的哪个方位
- unity3d 在2D空间中让一个点注视另一个点
- 给定机器人坐标和朝向,判断某点在机器人的哪个方位
- U3D中运用向量点乘判断方位
- 判断点在2D多边形内的一个算法
- Unity3D中目标相对自身的前后左右方位判断
- Unity3D中目标相对自身的前后左右方位判断
- Unity3D中目标相对自身的前后左右方位判断
- [Unity3D]AR应用中,关于东南西北方位的判断。
- Unity3D中目标相对自身的前后左右方位判断
- 2D中判断点是否在某一三角形内算法
- 判断一个字符串在另一个字符串中出现的次数
- 判断点是否在多边形内(2D空间)
- 判断一个点是否在 2D 三角形内
- 树状数组(Binary Indexed Trees)树状数组详解(转载)
- VS 2010 静态库编译
- windows下cocos2d-x的Android环境配置
- c++ 直接中缀表达式求值 仅支持正整数的四则混合运算
- 前天买的笔芯,正好来黑一下5c
- 2D中如何判断一点在另一个点的那个方位
- UVa 10300 - Ecological Premium
- e-model算法
- WMIC
- 黑马程序员_Java基础学习笔记2
- nginx+phpmyadmin
- 归并排序与逆序对的个数
- sicily 1050 Numbers & Letters
- 兎子产子(斐波那契数列)