查找Cross Product以在MatplotLib中找到线上方/下方的点

P V*_*Ved 3 python matplotlib

我试图在MatPlotLib中绘制一条线,并根据斜率找到线上方或下方的所有点.

阅读本文,阅读Cross Product,我相信这是我检查要点的最佳方法.

我不确定在python中实现它的最佳方法是什么.

v1 = {x2-x1, y2-y1}   # Vector 1
v2 = {x2-xA, y2-yA}   # Vector 2
xp = v1.x*v2.y - v1.y*v2.x  # Cross product
Run Code Online (Sandbox Code Playgroud)

有没有人试过实现类似的东西?

我还有其他方法可以找到地块上的点是否在MatPlotLib中的线上方或下方?

Imp*_*est 9

如在该问题中所见,叉积确实可用于确定点是位于由两点限定的线之上还是之下.

因此,让ab是两点确定一条线,并p为此我们想知道线的相对位置(组)点(县).然后如果

numpy.cross(p-a, b-a) < 0
Run Code Online (Sandbox Code Playgroud)

True位于线上方的点.

要准确这里,"上面"是指从点看a向点b,该点p位于该线的左侧.

这可以用来对散点图中的点进行不同的着色,具体取决于它们是在线的上方还是下方,如下所示:

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述