Разделение трехмерной сетки на куски произвольного размера - PullRequest
0 голосов
/ 19 мая 2010

У меня есть сетка, определяемая 4 точками в трехмерном пространстве. Мне нужен алгоритм, который подразделяет эту сетку на подразделения произвольного размера по горизонтали и вертикали. Если размер подразделения не является точным делителем размера сетки, то края будут меньше.

Все алгоритмы подразделений, которые я нашел, только подразделяют сетки на точные степени 2. Кто-нибудь знает один, который может делать то, что я хочу?

Если это не удастся, я думаю о возможной реализации: повернуть сетку так, чтобы она была плоской на оси Z, подразделить в 2D и затем перевести обратно в 3D. Это потому, что мой разум находит 3D сложным;) Есть лучшие предложения?

Использование C #, если это имеет какое-либо значение.

Ответы [ 2 ]

2 голосов
/ 21 мая 2010

Если вам нужно работать только с прямоугольником в 3D, вам просто нужно получить два вектора ребер, а затем вы можете сгенерировать все внутренние точки разделенного прямоугольника.Например, скажем, ваш квад определяется как (x0,y0),...,(x3,y3), чтобы обойти квад.Векторы ребер относительно точки (x0,y0) равны u = (x1-x0,y1-y0) и v = (x3-x0,y3-y0).

Теперь вы можете генерировать все внутренние точки.Предположим, вы хотите, чтобы M ребер было по первому ребру, а N - по второму, тогда внутренние точки просто

(x0,y0) + i/(M -1)* u + j/(N-1) * v

, где i и j идут от 0 .. M-1 и 0 .. N-1 соответственно,Вы можете выяснить, какие вершины необходимо соединить вместе, просто отработав это на бумаге.

Этот вид равномерного подразделения также хорошо работает для треугольных сеток, но каждое ребро должно иметь одинаковое количество подразделенных ребер.

Если вы хотите подразделить общую сетку, вы можете просто сделать это для каждого отдельного треугольника / четверки.Этот вид равномерного разделения приводит к плохому качеству сеток, поскольку все исходные плоские грани остаются плоскими.Если вы хотите что-то более сложное, вы можете взглянуть на Lid subidivision, Catmull-Clark и т. Д. Они обычно ограничены степенями двух степеней, но если вы исследуете оригинальные формулировки, я думаю, что вы можете получить трафареты подразделений дляВласть двух дивизий.Теория, лежащая в основе этого, немного сложнее, чем я могу здесь разумно описать.

0 голосов
/ 19 мая 2010

Теперь, когда вы объяснили вещи немного более четко, я не вижу вашей проблемы: у вас есть прямоугольник, и вы хотите разделить его на прямоугольные плитки. Таким образом, точки сетки, которые вы хотите, регулярно расположены в обоих ортогональных направлениях. В 2D это тривиально, конечно? В 3D это также тривиально, хотя математика немного сложнее.

Вне моей головы, я бы предположил, что преобразование из 3D в 2D (и одновременное выравнивание прямоугольника с осями координат), затем вычисление точек сетки, затем преобразование обратно в 3D, вероятно, примерно так же просто ( Потребляет много времени на процессор), в первую очередь, работая в 3D.

Да, использование C # означает, что я не могу предложить код, чтобы помочь вам.

Прокомментируйте или отредактируйте свой вопрос, если я пропустил суть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...