Об'єм 3D опуклого корпусу з невеликої точки встановлює всі на корпусі


11

У мене є питання, подібне до цього, яке задавали раніше, окрім 3D, і мені потрібен лише об'єм, а не фактична форма корпусу.

Точніше, мені дають невеликий набір точок (скажімо, 10-15) у 3D, всі вони, як відомо, лежать на опуклому корпусі набору точок (тому всі вони "мають значення" і визначають корпус). Я хочу лише обчислити об'єм корпусу, мені не байдуже обчислення фактичного багатогранника. Чи існує ефективний алгоритм для цього?


Ви знаєте, точки - вершини багатогранника. Чи знаєте ви обличчя (багатокутники на корпусі)? Якщо так, то обчислити об'єм можна досить легко (як сума об'ємів "конуса").
hardmath

1
Ледачим способом було б спочатку тріангуляцію, а потім додавання обсягів тетраедрів (дуже легко обчислити).
Shuhao Cao

@hardmath: Ні. Я знаю, що якби я знав форми грані, це було б легко.
Віктор Лю

@Shuhao Cao: Чи існує простий алгоритм тріангуляції для цього особливого випадку? Як правило, алгоритми 3D тетраедралізації досить складні, і, я думаю, потрібно буде вирішити цю проблему тисячі чи мільйони разів.
Віктор Лю

Відповіді:



2

Невеликий тест у MATLAB для кількості вершин , кожен компонент є рівномірним випадковим числом у [ 0 , 1 ] :N=100[0,1]

N = 100;
p=rand(N,3);
tic;
T = delaunayTri(p(:,1),p(:,2),p(:,3));
t = T.Triangulation;
e1 = p(t(:,2),:)-p(t(:,1),:);
e2 = p(t(:,3),:)-p(t(:,1),:);
e3 = p(t(:,4),:)-p(t(:,1),:);
V = abs(dot(cross(e1,e2,2),e3,2))/6;
Vol = sum(V);
time_elapse = toc;

Результат:

time_elapse =
              0.014807
Vol =
      0.67880219135839

Я б сказав, що це досить швидко, якщо ви хочете запустити його разів, це займе менше 3 годин. Ось що це таке:106

конвул

4×4N=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

7×1051[0,1]3


До речі, тест робиться на моєму старому 2007 Core 2 T61p.
Shuhao Cao

2

З питання про поліедральні обчислення Komei Fukuda :

Rd

Відомо, що обчислення об'єму V-політопа (або Н-політопа) є # P-жорстким, див. [DF88] та [Kha93]. Існують теоретично ефективні рандомізовані алгоритми для наближення обсягу опуклого тіла [LS93], але, здається, не існує жодної реалізації. Існує порівняльне дослідження [BEF00] різних алгоритмів обчислення об'ємних політопів. Це вказує, що не існує єдиного алгоритму, який би добре працював для багатьох різних типів політопів.

[DF88] ME Дайер і А. М. Фриз. Складність обчислення об’єму багатогранника. SIAM J. Comput. , 17: 967-974, 1988.

[Ха93] Л.Г. Хачіян. Складність обчислення об'ємних політопів. У Дж. Пач, редактор « Нові тенденції дискретної та обчислювальної геометрії» , стор. 91-101. Спрингер Верлаг, Берлін, 1993.

[LS93] Л. Ловаш та М. Симоновіц. Випадкові прогулянки у опуклому тілі та вдосконалений алгоритм гучності. Випадкові структури та алгоритми , 4: 359-412, 1993.

[BEF00] Б. Буелер, А. Енге та К. Фукуда. Обчислення точного обсягу для опуклих політопів: практичне дослідження. У Г. Калай та Г. М. Циглер, редактори, « Політопи - комбінаторика та обчислення» , DMV-семінар 29, стор. 131-154. Бірхаузер, 2000.

Це, здається, може поховати специфіку тривимірної проблеми серед труднощів більш високих розмірів, незважаючи на назву паперу "Дайер та Фриз". З їх конспекту: "Ми показуємо, що обчислення об'єму багатогранника, поданого або як список граней, або як список вершин, настільки ж важке, як обчислення постійної матриці".

PPNvvPPPP={xR3:Axb}

P

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.