不知道是不是和前人的基本上一样,自己随便推导了一个
基本思想:
给定三角形顶点 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内的充分必要条件
本条件计算量较求角度等要小,全部都是四则运算,没有涉及到任何三角公式,所以算法复杂度应该较低