3D 를 제외하고 는 이전에 요청한 것과 비슷한 질문 이 있으며 실제 선체 모양이 아닌 볼륨 만 필요합니다.
보다 정확하게는, 3D로 작은 점 세트 (예 : 10-15)가 주어 졌는데,이 점들은 모두 점 세트의 볼록 껍질에 놓여있는 것으로 알려져 있습니다. 선체의 부피 만 계산하고 싶습니다. 실제 다면체 계산은 신경 쓰지 않습니다. 이를위한 효율적인 알고리즘이 있습니까?
3D 를 제외하고 는 이전에 요청한 것과 비슷한 질문 이 있으며 실제 선체 모양이 아닌 볼륨 만 필요합니다.
보다 정확하게는, 3D로 작은 점 세트 (예 : 10-15)가 주어 졌는데,이 점들은 모두 점 세트의 볼록 껍질에 놓여있는 것으로 알려져 있습니다. 선체의 부피 만 계산하고 싶습니다. 실제 다면체 계산은 신경 쓰지 않습니다. 이를위한 효율적인 알고리즘이 있습니까?
답변:
Shuhao Cao의 제안을 이길 수 있다면 놀랄 것입니다. 선체를 삼각 측량하면 선체를 계산 한 다음 볼륨을 계산하십시오. 증분 알고리즘 또는 선물 포장 알고리즘을 사용하여 선체를 계산할 수 있습니다. 쉬운 코드를 원한다면 가능한 모든 삼각형 위에 n 4 루프를 작성 하여 선체에 있는지 확인할 수 있습니다. 를 들어 N = 15 , 이것은 꽤 빨리 여전히, 당신은 쉽게 바로 가기를 구현할 수 있습니다. 삼각형면이 모두 있으면 정점 v 하나를 선택 하고 각 삼각형 T 와 v 로 4 면체를 만듭니다 . 볼륨은 4 ×꼭짓점 좌표에서 4 개의 결정 요인.
MATLAB에서 정점 수 대한 작은 테스트에서 각 성분은 [ 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
번 10 번 실행하려면 3 시간도 걸리지 않습니다. 다음과 같습니다.
time_elapse =
3.244278
Vol =
0.998068316875714
Komei Fukuda의 다면체 계산 FAQ에서 :
V- 폴리 토프 (또는 H- 폴리 토프)의 부피를 계산하는 것은 # P-hard 인 것으로 알려져있다 [DF88] 및 [Kha93]. 볼록 바디의 부피를 근사화하는 이론적으로 효율적인 랜덤 알고리즘이 있지만 [LS93] 구현이 불가능한 것 같습니다. 볼록형 폴리 토프에 대한 다양한 부피 계산 알고리즘에 대한 비교 연구 [BEF00]가 있습니다. 여러 유형의 폴리 토프에 잘 작동하는 단일 알고리즘이 없음을 나타냅니다.
[DF88] ME Dyer와 AM Frieze. 다면체의 부피를 계산하는 복잡성. SIAM J. 컴퓨팅 , 17 : 967-974, 1988.
[Kha93] LG 카 치얀. 폴리 토프 부피 계산의 복잡성. J. Pach, 편집자, 이산 및 계산 기하학의 새로운 트렌드 , 91-101 페이지에서. 1993 년 베를린 Springer Verlag
L. Lovasz와 M. Simonovits. 볼록한 몸통에서의 무작위 보행과 향상된 볼륨 알고리즘. 무작위 구조 및 알고리즘 , 4 : 359-412, 1993.
[BEF00] B. Bueler, A. Enge 및 K. Fukuda. 볼록한 폴리 토프에 대한 정확한 부피 계산 : 실용적인 연구. G. Kalai 및 GM Ziegler에서 편집자 인 Polytopes-Combinatorics and Computation , DMV-Seminar 29, 131-154 페이지를 참조하십시오. Birkhauser, 2000 년.
이것은 Dyer와 Frieze 논문의 제목에도 불구하고 더 큰 차원의 어려움 중에서 3D 문제의 세부 사항을 묻는 것처럼 보일 수 있습니다. 초록에서 : "우리는 패싯 목록 또는 정점 목록으로 주어진 다면체의 부피를 계산하는 것이 행렬의 영속성을 계산하는 것만 큼 어렵다는 것을 보여줍니다."