图像上判断点在线左侧还是右侧

比较简单,直接上代码:

def LeftOfLine(p, p1, p2):
    tmpx = (p1[0] - p2[0]) / (p1[1] - p2[1]) * (p[1] - p2[1]) + p2[0]
    if tmpx > p[0]:
        return True
    return False

or

def point_on_left_or_right_of_line(point,line):
   point = np.array(point)
   cross_product = (point[0]-line[0][0])*(line[1][1]-line[0][1])-(point[1]-line[0][1])*(line[1][0] - line[0][0])
   if cross_product > 0:
       return "left"
   elif cross_product < 0:
       return "right"
   else:
       return "online"

第二段代码是有向的,要从向量line由起点指向终点的方向看左还是右。
只要线不是水平的就行
这段代码是chatgpt生成的,这里做个记录,方便自己后期使用快速找到。
chatgpt output如下:
在计算几何中,判断一个点相对于一条直线的左侧还是右侧是一个基本问题。我将介绍三种常用的方法来判断点相对于直线的位置:

  1. 无向线段的判断逻辑

    • 原理:主要利用直线的斜率。
    • 给定三个点 a = ( p x , p y ) a = (p_x, p_y) a=(px,py), b = ( q x , q y ) b = (q_x, q_y) b=(qx,qy), 和 c = ( l x , l y ) c = (l_x, l_y) c=(lx,ly),其中 a a a b b b 是直线上的两个点,我们要判断点 c c c 是在直线的左侧还是右侧。
    • 计算直线 a b ab ab 的斜率 k k k
    • 假设存在点 D = ( m , n ) D = (m, n) D=(m,n) 在直线 a b ab ab 上,且 D D D y y y 坐标等于 c c c y y y 坐标,即 n = l y n = l_y n=ly
    • 如果 m > l x m > l_x m>lx,说明点 c c c 在直线的左侧;如果 m < l x m < l_x m<lx,说明点 c c c 在直线的右侧;如果 m = l x m = l_x m=lx,则点 c c c 在直线上。
    • 代码示例:
      def LeftOfLine(p, p1, p2):
          tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x
          if tmpx > p.x:
              return True
          return False
      
  2. 利用行列式进行判断

    • 原理:利用三阶行列式的几何意义,判断点的方位。
    • 具体原理:行列式的几何意义利用面积的方向性,知道点在线的左右端。
    • 如果行列式 D > 0 D > 0 D>0,则点在直线的左侧;如果 D < 0 D < 0 D<0,则点在直线的右侧;如果 D = 0 D = 0 D=0,则点在直线上。
  3. 利用向量的叉积

    • 原理:利用了向量叉积的法向量,结合了右手法则,就可以知道点 c c c 在线段的哪一侧。
    • 具体原理:根据三个点做出两条同一点出发的两个向量,根据叉乘公式,计算出一个常数 M M M
    • M M M 可以等于两个向量的模乘以两条向量的夹角的正弦值 s i n a sina sina
    • 如果 M > 0 M > 0 M>0,则点 c c c 在直线的左侧;如果 M < 0 M < 0 M<0,则点 c c c 在直线的右侧;如果 M = 0 M = 0 M=0,则点 c c c 在线段上。

这些方法都可以帮助您判断点相对于直线的位置。选择适合您问题的方法,并根据您的具体情况使用。¹²³⁴⁵

源: 与必应的对话, 2024/3/12
(1) 判断点在直线的左侧和右侧的方法及原理_判断点在直线的左侧还是右侧-CSDN博客. https://blog.csdn.net/qq_39027890/article/details/125803790.
(2) 【UE5】判断点在向量左侧、右侧、线上[点和向量的关系] - 知乎. https://bing.com/search?q=%e5%88%a4%e6%96%ad%e7%82%b9%e5%9c%a8%e7%ba%bf%e7%9a%84%e5%b7%a6%e4%be%a7%e8%bf%98%e6%98%af%e5%8f%b3%e4%be%a7.
(3) 如何使用Python和DLib找到位于直线左侧或右侧的点?-腾讯云开发者社区-腾讯云. https://cloud.tencent.com/developer/ask/sof/476495.
(4) 【UE5】判断点在向量左侧、右侧、线上[点和向量的关系] - 知乎. https://zhuanlan.zhihu.com/p/501964806.
(5) 算法:判断点在直线的左右哪一侧 - 木狼 - 博客园. https://www.cnblogs.com/itsone/p/10728560.html.
(6) undefined. http://zhidao.baidu.com/question/47341112.html.
(7) undefined. http://blog.csdn.net/modiz/article/details/9928955.
(8) undefined. https://www.cnblogs.com/carekee/articles/2299546.html.

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值