比较简单,直接上代码:
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如下:
在计算几何中,判断一个点相对于一条直线的左侧还是右侧是一个基本问题。我将介绍三种常用的方法来判断点相对于直线的位置:
-
无向线段的判断逻辑:
- 原理:主要利用直线的斜率。
- 给定三个点 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
-
利用行列式进行判断:
- 原理:利用三阶行列式的几何意义,判断点的方位。
- 具体原理:行列式的几何意义利用面积的方向性,知道点在线的左右端。
- 如果行列式 D > 0 D > 0 D>0,则点在直线的左侧;如果 D < 0 D < 0 D<0,则点在直线的右侧;如果 D = 0 D = 0 D=0,则点在直线上。
-
利用向量的叉积:
- 原理:利用了向量叉积的法向量,结合了右手法则,就可以知道点 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.