您的位置:首页 > 其它

分享自己推导的判断点是否落在三角形中的算法

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内的充分必要条件

本条件计算量较求角度等要小,全部都是四则运算,没有涉及到任何三角公式,所以算法复杂度应该较低 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 c