По заданной поверхности найдите детали, разрезанные пополам поверхностью - PullRequest
1 голос
/ 18 ноября 2009

Допустим, у меня есть поверхность (S1), и у меня есть другая поверхность (S2), которая прорезает ее. Как найти многогранник, образованный пересечением двух, как показано?

В приведенном выше примере должны быть возвращены два многогранника, один выше S2, другой ниже S1.

Но S1 и S2 определяются трехмерными координатами. Скажем, координаты для S1 (P1,P2, P3, P4) и S2 P5,P6, P7, P8, а точки пересечения P9 и P10. Я хочу программу, которая возвращает мне два многогранника:

P1,P2,P9,P10,P5,P6

и

P3,P4,P10,P9,P7,P8

Я знаю, что можно получить точку пересечения двух поверхностей и сформировать многогранники, но было бы хорошо, если бы у меня была встроенная функция matlab для этого

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Найдите пересечение двух поверхностей (если предположить, что они являются плоскостями, это тест на параллельность, перекрестное произведение и решение линейного уравнения, чтобы проверить, где они фактически пересекаются). Тогда у вас есть все точки, необходимые для построения двух многогранников. Возможно, вы захотите проверить, что вы объединяете «правильные» концы и нормальные значения имеют смысл, но в приведенном выше случае есть 6 точек для каждого многогранника, и 2 из этих точек являются общими для плоского пересечения.

0 голосов
/ 18 ноября 2009

Я не совсем уверен, как вы собираетесь определить свой многогранник. Вы хотите, чтобы он определялся объемом, вершинами, ребрами, гранями или просто зная, принадлежит ли данная точка в пространстве (x, y, z) к какому многограннику?

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

Учитывая, что ваши координаты X и Y являются общими для S1 и S2, простого различия if должно быть достаточно для различения двух многогранников.

Рассмотрим следующий пример:

[x,y] = meshgrid(-10:0.1:10,-10:0.1:10); % Creates x & y meshgrids for [-10,10]
S1 =  4.*x + 3.*y;
S2 = 12.*x + 6.*y - 12;

Теперь у нас есть S1 и S2, мы можем создать логическую матрицу, которая различает два:

logical = S1 < S2;

В дальнейшем я не знаю, как вы хотите поступить.

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