Сообщение от drunnik
образована например уже сразу 10 точками ?
|
Если внимательно, с листком бумаги, посмотреть алгоритм то все станет понятно. Никто не заметил, но он работает не для всех фигур, например для звезды п.3 не выполняется в принципе. Но если вспомнить, что полигоны имеют внутреннюю и наружную стороны, то можно алгоритм сделать общим для всех моделей:
- Ищутся два полигона имеющие общую сторону (образуют тетраэдр с 4 вершинами) и удовлетворяющие условию: точка не принадлежащая полигону должна лежать с его внутренней стороны (условие для обоих полигонов)
- считается объем тетраэдра по координатам 4 точек (например по формуле http://www.pm298.ru/zadachi3.shtml или самому вывести). Объем складывается с объемом уже удаленных ранее тетраэдров.
- Полигоны удаляются из модели.
- Удаляются вершины не принадлежащие ни одному полигону модели. Если была удалена 1 вершина, то из оставшихся 3 создается полигон лицевой стороной внутрь удаленного тетраэдра. Если небыло удалено ни одной вершины, то создаются 2 новых полигона не равных удаленным, направлением внутрь удаленного тетраэдра. Если удалены 2 или более вершин, то новых полигонов не создается.
- Если в модели еще остались полигоны, то переход на п.1, иначе суммарный объем удаленных тетраэдров и есть объем модели.
Как определить с внутренней или с наружной стороны полигона находится четвертая точка, я думаю, понятно. В процессе подсчета модель разрушается, поэтому лучше использовать копию или прошедшее время в отчете: "У модели был объем V"