分享自己推导的判断点是否落在三角形中的算法
2007-04-13 17:48
459 查看
不知道是不是和前人的基本上一样,自己随便推导了一个
基本思想:
给定三角形顶点 A B C,以及任意一点D
1、首先判断ABC要一定能保证构成三角形,只要斜率kAB != kAC即可
2、从A出发作过D的射线,如果AD不平行于BC,即kAD != kBC,则AD必可交BC于E点。
只要判断交点E位于BC之间,并且D位于AE之间即可保证D在三角形内。
即(xE-xB)(xE-xC)<0且(xE-xD)(xA-xD)<0
所以所有的判断条件为四条:
1) kAB != kAC
2) kAD != kBC
3) (xE-xB)(xE-xC)<0
4) (xE-xD)(xA-xD)<0
经过推导,最终结果如下(全部用各点间斜率和x坐标表示):
1) kAB != kAC
2) kAD != kBC
3) (kAD-kAB)(xA-xB)(kAD-kAC)(xA-xC)<0
4) (kAD-kBC)(xA-xD)(kBD-kBC)(xB-xD)<0
以上四条为D点落在三角形ABC内的充分必要条件
本条件计算量较求角度等要小,全部都是四则运算,没有涉及到任何三角公式,所以算法复杂度应该较低
基本思想:
给定三角形顶点 A B C,以及任意一点D
1、首先判断ABC要一定能保证构成三角形,只要斜率kAB != kAC即可
2、从A出发作过D的射线,如果AD不平行于BC,即kAD != kBC,则AD必可交BC于E点。
只要判断交点E位于BC之间,并且D位于AE之间即可保证D在三角形内。
即(xE-xB)(xE-xC)<0且(xE-xD)(xA-xD)<0
所以所有的判断条件为四条:
1) kAB != kAC
2) kAD != kBC
3) (xE-xB)(xE-xC)<0
4) (xE-xD)(xA-xD)<0
经过推导,最终结果如下(全部用各点间斜率和x坐标表示):
1) kAB != kAC
2) kAD != kBC
3) (kAD-kAB)(xA-xB)(kAD-kAC)(xA-xC)<0
4) (kAD-kBC)(xA-xD)(kBD-kBC)(xB-xD)<0
以上四条为D点落在三角形ABC内的充分必要条件
本条件计算量较求角度等要小,全部都是四则运算,没有涉及到任何三角公式,所以算法复杂度应该较低
相关文章推荐
- Qt 判断一个点是否落在三角形内(算法)
- [置顶] 平面中判断点是否在某一三角形内算法 .
- 计算几何工具算法-判断点是否在三角形内
- 求判断点是否在三角形内的最佳算法
- 算法发现~判断点是否在三角形内
- 判断三维空间中的一个点是否在三角形内,边上的一种算法
- 分享知识-快乐自己:SpringBoot结合使用拦截器(判断是否用户是否已登陆)
- 平面中判断点是否在某一三角形内算法 .
- 和大家分享一个判断点是否在多边形范围内的算法
- 【算法】计算机图形学的一些经典小题:判断点在多边形内,随机生成三角形内的点,判断两个矩形是否相交等
- 平面中判断点是否在某一三角形内算法 .
- 判断是否是直角三角形的算法研究
- 2D中判断点是否在某一三角形内算法
- 判断点是否在三角形内
- 判断点是否在三角形内
- 判断一个数是否是素数的算法
- matlab自学经验成果分享 判断变量是否为指定类型
- 常见算法题:判断表达式括号是否匹配
- 判断点是否在三角形内 和 点是否在矩形内
- 自己用js手动写个判断数组(多维)是否存在某值