【发布时间】:2019-09-26 05:29:27
【问题描述】:
我正在寻找找到两条线的交点的解决方案。我知道这可以通过找到他们的向量积来完成。
我在这里偶然发现了这个例子:
def get_intersect(a1, a2, b1, b2): s = np.vstack([a1,a2,b1,b2]) # s for stacked h = np.hstack((s, np.ones((4, 1)))) # h for homogeneous l1 = np.cross(h[0], h[1]) # get first line l2 = np.cross(h[2], h[3]) # get second line x, y, z = np.cross(l1, l2) # point of intersection if z == 0: # lines are parallel return (float('inf'), float('inf')) return (x/z, y/z)
我已经浏览了这个例子并在几个场景中使用了它,它似乎工作得很好。但是,有三件事我不太明白:
- 为什么向量需要是同质的(我们用 1 填充列的部分)?
- 均质解决方案与非均质解决方案相比有何不同(如果有的话)?
- 为什么我们只检查 Z 轴的平行度而不检查 X 轴和 Y 轴的平行度?
我觉得我遗漏了一些非常明显的东西,但我无法理解它是什么。
【问题讨论】:
-
Z 轴对于这个问题不是“物理的”或技术上必需的,它只是用作计算denominator in this equation 的便捷数学技巧的一部分,而无需直接使用组件.
-
@meowgoesthedog 那我们为什么要用它来寻找交叉点呢?我知道齐次坐标但是我不明白为什么在这里使用它们(除了可能优化的观点)。
-
正如我所说,计算链接方程中的项(不仅仅是分母,一个错字)是一个技巧。归结为分别计算
(a, b, 1) ^ (c, d, 1)与分别计算b - d, c - a, ad - bc;前者比后者更容易使用 SIMD 进行优化。但是有这种方法的几何解释——我会在有机会的时候尝试写一个答案。 -
@meowgoesthedog 请做,我将不胜感激!
标签: python math geometry cross-product line-intersection