判断一个点是否在三角形内的几种方法(2D)
一、根据面积来计算
这个比较容易理解,如果一个点 p 在三角形内部或者边线上,那么 p 与三角形的其中
两个顶点组成的三个三角形面积与原三角形面积应该相等,这时候问题就转化为如何计算
三角形的面积了。
三角形面积=底*高/2
还可以用这个公式:
s= |(t0.x * t1.y + t1.x * t2.y + t2.x * t0.y - t1.x * t0.y - t2.x * t1.y - t0.x * t2.y)**0.5|
二、利用矢量叉积来计算Q
方法一
计算矢量叉积是与直线和线段相关算法的核心部分。设矢量 P = ( x1, y1
),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2 和 p1+p2 所组成的平行四边
形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。显然有性
质QQQ P × Q = - ( Q × P ) 和QQQ P × ( - Q ) = - ( P × Q )。
一般在不加说明的情况下,本文下述算法中所有的点都看作矢量,两点的加减法就是矢量
相加减,而点的乘法则看作矢量叉积。QQQ
叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:
QQQ
若QQQ P × Q > 0 , 则 P 在 Q 的顺时针方向。QQQ
若QQQ P × Q < 0 , 则 P 在 Q 的逆时针方向。QQQ
若QQQ P × Q = 0 , 则 P 与 Q 共线,但可能同向也可能反向。QQ