给定的条件:三个点(最原始的数据)
已知三个点,a = (px,py),b=(qx,qy),c = (lx,ly),求相对于由a和b两点确定的一条直线,点c位于左侧还右侧。
方法:无向线段的判断逻辑。
原理:主要利用直线的斜率k。
求出直线ab的斜率k,假设存在点D=(m,n)在ab直线上,且D的y值等于c的y值,即n = ly。此时可以通过斜率算出m,比较m与lx的大小,如果m>lx说明点在线的左边,小于则在右边,等于则在线上。
代码如下:
bool LeftOfLine(const ZCoord2D& p, const ZCoord2& p1, const ZCoord2D& p2)
{
double tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x;
if (tmpx > p.x)//当tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。
return true;
return false;
}