2D中如何判断一点在另一个点的那个方位
2009-08-08 10:32
204 查看
在工作中经常遇到判断一个点在另一个点的那个方位的问题,如下图,这里需要确定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
代码如下:
总结:通过该方法可以判断其它区域的情况,只需将判断条件修改一下即可
具体算法描述如下:
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; }
总结:通过该方法可以判断其它区域的情况,只需将判断条件修改一下即可
相关文章推荐
- 2D中如何判断一点在另一个点的那个方位
- 2D中如何判断一点在另一个点的那个方位
- 如何判断一个字符串中是否包含另一个字符串
- 如何在Ubuntu QML应用中判断应用的方位(landscape或portrait)
- 如何判断通过WSAAsyncSelect 注册的事件中,发生的是那个
- 如何判断一点在三角形内
- 如何快速判断一个整数是否可以整除另一个整数的理论分析
- 如何判断一个二叉树是否为另一个二叉树的子树
- 如何判断一点在三角形内
- 【面试题】如何判断一个类是不是另一个的子类
- 如何判断自己的浏览器支持的是javascript的那个版本
- 如何判断一点在三角形内
- C#中如何判断list是否完整包含另一个list
- 两个点已知一个点的方向,判断另一个点在这个的方位(左前/右后)
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- 如何判断一个page是另一个page的buddy呢?
- 如何快速判断一个整数是否可以整除另一个整数的理论分析
- 如何判断一点在三角形内
- php如何判断一个字符串是否包含另一个字符串
- php如何判断一个字符串是否包含另一个字符串