Как мне рассчитать вершины на n пересекающихся плоскостей - PullRequest
1 голос
/ 16 сентября 2010

В основном я пытаюсь смоделировать некоторые кисти карты, которые имеют следующий формат:

Каждая кисть определяет сплошную область. Кисти определяют эту область как пересечение четырех или более плоскостей. Каждая плоскость определяется тремя неколинейными точками. Эти точки должны идти по часовой стрелке:

1--2----------------->
|
3
|
|
|
|
|
,

Каждый оператор кисти выглядит так:

 {
  ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0
  ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 0 64 ) ( 1 0 64 ) ( 0 1 64 ) GROUND1_6 0 0 0 1.0 1.0
  ( 0 0 128 ) ( 0 1 128 ) ( 1 0 128 ) GROUND1_6 0 0 0 1.0 1.0
 }

Вероятно, это немного сбивает с толку, когда вы впервые видите это. Он определяет прямоугольную область, которая простирается от (128,128,64) до (256,384,128). Вот что означает одна строка:

  ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0
   1st Point   2nd Point   3rd Point   Texture

Мне нужно найти точки пересечения, чтобы я мог нарисовать фигуру только с помощью метода, который позволяет рисовать 2d панели в трехмерном пространстве. Следующий код нарисует треугольник в пространстве, например:

beginShape();
vertex(x0,y0,z0);
vertex(x1,y1,z1);
vertex(x2,y2,z2);
vertex(x0,y0,z0);
endShape();

Ответы [ 2 ]

0 голосов
/ 22 сентября 2010

Нет.Я искал нетривиальный псевдокод, чтобы найти все точки пересечения N плоскостей, где некоторые могут быть параллельными, а другие нет, но для которых плоскости и их пересечения создают топологию с двумя сферами.

Нетривиальный псевдокод: а) кто-то уже решил эту проблему, а вы просто в режиме повторного использования кода, или б) они решают эту проблему за вас.

Или в) это математическая проблема, а не проблема программирования.Вы обращались к каким-либо профессорам по математике за помощью в этом?Есть математическое свойство stackoverflow (я думаю, два!)

Единственный известный мне способ быстро найти точки пересечения - это получить векторы в формуле, которую я связал ранее.Это дало бы вам точки пересечения довольно быстро.У вас уже есть все биты, необходимые для вычисления этой информации.

Как узнать, пересекает ли линия плоскость в C #?- Базовая 2D геометрия

и

http://www.google.com/search?q=plane+intersection+.net

0 голосов
/ 17 сентября 2010

http://mathworld.wolfram.com/Plane-PlaneIntersection.html

Вот как вы находите места пересечения трех плоскостей. Поскольку вы не работаете в 4dim (это игра, верно? Мы видим в 3D), то приведенного здесь решения для 3 плоскостей должно быть достаточно.

...