Пересечение бесконечных объемов любого измерения - PullRequest
3 голосов
/ 29 июля 2011

Мне нужен код / ​​текст / ключевые слова 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 Ответ

6 голосов
/ 29 июля 2011

Вы пытаетесь представить N-мерное пространство, встроенное в M-мерное пространство.Например, (N = 2, M = 3) - это плоскость в трехмерном «мире».

Вы можете реализовать определяющий набор точек, если хотите, но естественный способ представить такоеподпространство имеет набор линейных уравнений или базисных векторов, так что это должно быть базовой реализацией.Если вы используете базисные векторы, их N.Если вы используете уравнения, каждое из них уменьшает размерность на 1, поэтому их MN.

Чтобы найти пересечение двух таких подпространств, вы просто объединяете их множества и уменьшаете (до набора линейно независимых векторов илиуравнения).Размерность пересечения может быть любой от нуля до N.

Эти методы просты и хорошо известны и относятся к линейной алгебре 1008 *.

РЕДАКТИРОВАТЬ:
Я думаю, что проще всего иметь дело с базисными векторами.

  1. Используйте точки, чтобы получить базисные векторы.
  2. Используйте базисные векторы, чтобы найти базисные векторы ортогонального пространства (например, если пространство является линией в 2D, ортогональное пространство является перпендикулярной линией, если пространство является линией в 3D, ортогональное пространство является плоскостьюперпендикулярно прямой, если пространство является плоскостью в 3d, ортогональное пространство является прямой, перпендикулярной плоскости).
  3. Если хотите, тривиально получить уравнения для пространства из векторов для ортогонального пространства.
  4. Чтобы получить пересечение двух пространств, возьмите объединение их баз и приведите к базису.Решите одну общую точку, и все готово.
...