C/C++

Как разбить на тетраэдры фигуру, зная координаты её вершин? Алгоритм.

У меня имеется массив из некоторого количества неупорядоченных точек 3-мерного пространства. Как их лучше расположить в массиве, чтобы было проще разбить фигуру на тетраэдры. И как вообще разбить её на тетраэдры?

Буду благодарен за помощь!
Какой арбуз?
Роберт Аристов
Роберт Аристов
188
Лучший ответ
>У меня имеется массив из некоторого количества неупорядоченных точек
>чтобы было проще разбить фигуру
Какую еще фигуру? У тебя же есть только неупорядоченные точки, откуда вдруг взялась фигура? Конечно, из них можно слепить каую-то фигуру, но для этого нужно эти точки для начала как-то упорядочить, иначе абсолютно неясно, по каким правилам должна строиться твоя "фигура".
После такового упорядочивания, если фигура выпуклая, достаточно взять какую-то точку внутри нее и соединить каждые 3 смежные точки из первого массива с ней. В случае невыпуклой фигуры может понадобиться несколько таких точек.
ЮН
Юрий Носенко
89 858
Это задача триангуляции трёхмерной области. Область то хоть односвязная, или какая? А алгоритм в принципе мало чем отличается от триангуляции плоской области. Надо просто, например, разработать характеристическую функцию принадлежности точки области, для чего лучше всего искать сначала ближайшую вершину или ребро в двумерном случае, или ближайшую вершину, ребро или грань в трёхмерном. Если триангуляция должна быть (квази) оптимальной, то надо ещё внутренние точки регуляризовать определённым образом. Зачем всё это нужно - понятно? А как найти объём тела с помощью поверхностного интеграла и зачем в данном случае нужно его находить - понятно? Если ничего непонятно, тогда незачем здесь вообще такие вопросы задавать!. ))
Oktay Temrazov
Oktay Temrazov
29 440
короче эти точки в количестве 50 например штук нужно связать в тетраэдр у которого 5 вершин... Там могут быть пересечения. Так что делать нужно фигуру с максимально близкими вершинами. Есть точка отсчёта для трёхмерного пространства - грубо говоря угол - место соединения трёх плоскостей. От него строишь векторы до точек и группируешь их по дальности от этой точки нулевой точки по 5 штук.
Юрий К
Юрий К
21 700
Юрий К для 2Д это sqrt(x2+y2) а для 3D поищи в сети сам - вектор три координаты и найденное расстояние для каждой точки