本文可用于目标检测和目标跟踪来判断一个点在线的那一侧。
本文来自该文数学原理参看链接
有a,b两点决定一条直线,点p(可以是一个或多个)点是我们想要知道他位置的,如果有:
numpy.cross(p-a,b-a)<0
返回结果是True,那么点P位置是从a 向b点看,点p在直线的左侧,否则在另一侧,更准确说numpy.cross(p-a,b-a)=0 则点在线上,大于零在右侧。
如下有一份示例代码,用不同颜色来表示点不同位置:
import numpy as np
import matplotlib.pyplot as plt
isabove = lambda p, a,b: np.cross(p-a, b-a) < 0
a = np.array([1,1])
b = np.array([4,3])
p1 = np.array([2,4])
p2 = np.array([3,1])
p = np.array([p1,p2])
fig, (ax,ax2) = plt.subplots(ncols=2, sharex=True, sharey=True)
ax.plot([a[0],b[0]],[a[1],b[1]], marker="o", color="k")
ax.scatter(p[:,0],p[:,1], c=isabove(p,a,b), cmap="bwr", vmin=0, vmax=1)
p = np.random.rand(10,2)*5
ax2.plot([a[0],b[0]],[a[1],b[1]], marker="o", color="k")
ax2.scatter(p[:,0],p[:,1], c=isabove(p,a,b), cmap="bwr", vmin=0, vmax=1)
ax.set_xlim(0,6)
ax.set_ylim(0,6)
plt.show()
结果为:
改变a,b两点,a = np.array([1,2]),b = np.array([4,2])