我试图在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中的线上方或下方?
如在该问题中所见,叉积确实可用于确定点是位于由两点限定的线之上还是之下.
因此,让a
与b
是两点确定一条线,并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)
归档时间: |
|
查看次数: |
1752 次 |
最近记录: |