判断点在直线的左侧和右侧的方法及原理

这篇具有很好参考价值的文章主要介绍了判断点在直线的左侧和右侧的方法及原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

应用场景:
1.判断某一个点是否在线的指定的一侧。
2.判断一个点在线的左侧还是右侧。

给定的条件:三个点(最原始的数据)
已知三个点,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;
}

方法二:利用行列式进行判断。
原理:利用三阶行列式的几何意义,判断点的方位。
具体原理:行列式的几何意义
利用面积的方向性,知道点在线的左右端。
D=|1,px,py| = (py – qy) * lx + (qx – px) * ly + px * qy – qx * py
|1, qx,qy|
|1, lx, ly|

如果D>0,在左侧
如果D<0,在右侧
如果D=0,在线上

方法三:利用向量的叉积
原理:利用了向量叉积的法向量,结合了右手法则,就可以知道点c在线段的哪一侧。
具体原理:根据三个点做出两条同一点出发的两个向量,根据叉乘公式,计算出一个常数M,此M也可以等于两个向量的模乘以两条向量的夹角sina,由于sina在(0,Π)和(Π,2Π)上正负性不同且唯一,因此可以根据M的正负性判断c在直线的左右侧。
向量 ab = (qx-px,qy-py)
向量 ac = (lx -px,ly-py)
M = 向量a × 向量b = (qx-px)(ly-py) - (qy-py)(lx -px)
M > 0 时,在左侧
M < 0 时,在右侧
M = 0时,在线段上文章来源地址https://www.toymoban.com/news/detail-796517.html

到了这里,关于判断点在直线的左侧和右侧的方法及原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包