任意尺寸的无限体积的交点

时间:2011-07-29 10:21:21

标签: python math intersection multidimensional-array

我需要代码/文字/ google关键字/其他资源才能实现此课程。速度无关紧要。它应该适用于任何数量的维度。

class InfiniteVolume: # such as a point, line, plane, volume, 4d-volume
    def __init__(self, points): # two points for line, three points for plane, etc.
        self.points = points
        assert all(len(p)==len(points[0]) for p in points)

    def vdim(self): # Dimensions of the volume. For example 2.
        return len(self.points)-1

    def wdim(self): # Dimensions of the world.  For example 3.
        return len(self.points[0])

    def __contains__(self, point):
        # ???

    def intersect(self, other):
        assert self.wdim() == other.wdim()
        # ???

1 个答案:

答案 0 :(得分:6)

您试图表示嵌入在M维空间中的N维空间。例如,(N = 2,M = 3)是三维“世界”中的平面。

如果您愿意,可以实现一组定义的点,但表示这种子空间的自然方式是使用一组线性方程或基础向量,因此这应该是底层实现。如果使用基矢量,则有N个。如果你使用方程式,每个方程都会将维数减少1,所以它们都有M-N。

要找到两个这样的子空间的交集,您只需将它们的组合并减少(到一组线性独立的向量或方程)。交点的维数可以是从零到N的任何值。

这些技巧很简单,众所周知,属于Linear Algebra的标题。

修改:
我认为处理基础向量最容易。

  1. 使用这些点获取基础向量。
  2. 使用基向量来找到正交空间的基矢量(例如,如果空间是2D中的线,则正交空间是垂直线,如果空间是3D中的线,则正交空间是垂直于线的平面,如果空间是3d中的平面,则正交空间是垂直于平面的线。
  3. 如果您愿意,从正交空间的向量中获取空间的方程式是微不足道的。
  4. 要获得两个空格的交集,请将其基数的并集减少到基数。解决一个共同点,你就完成了。