3B dışbükey gövdenin küçük nokta kümelerinin hacmi


11

Daha önce 3D dışında sorulana benzer bir sorum var ve gövdenin gerçek şekline değil, sadece hacme ihtiyacım var.

Daha doğrusu, 3B olarak, hepsinin nokta kümesinin dışbükey gövdesine yattığı bilinen (böylece hepsi "önemli" ve gövdeyi tanımlayan) küçük bir nokta kümesi (örneğin, 10-15) verilir. Sadece gövdenin hacmini hesaplamak istiyorum, gerçek polihedronu hesaplamak umurumda değil. Bunu yapmak için etkili bir algoritma var mı?


Noktaların çokyüzlünün köşe noktaları olduğunu biliyorsunuz. Yüzleri biliyor musun (gövdedeki çokgenler)? Eğer öyleyse hacmi kolayca hesaplayabilirsiniz ("koni" hacimlerinin toplamı olarak).
hardmath

1
Tembel bir yol ilk önce üçgenleme, daha sonra tetrahedranın hacimlerini toplardı (hesaplaması çok kolay).
Shuhao Cao

@hardmath: Hayır. Faset şekillerini bilseydim kolay olacağını biliyorum.
Victor Liu

@Shuhao Cao: Bu özel durum için basit bir nirengi algoritması var mı? Genel olarak 3D tetrahedralizasyon algoritmaları oldukça karmaşıktır ve bu sorunu binlerce veya milyonlarca kez çözmeyi bekliyorum.
Victor Liu

Yanıtlar:


5

Shuhao Cao'nun önerisini yenebilirseniz şaşıracağım: gövdenin üçgenlemesini yaptıktan sonra gövdeyi ve sonra hacmi hesaplayın. Gövdeyi artımlı algoritma veya hediye sarma algoritması ile hesaplayabilirsiniz . Gerçekten kolay kod istiyorsanız, tüm olası üçgenlerin üzerine bir n 4 döngüsü yazarak gövdede olup olmadıklarını görebilirsiniz. For n = 15 , bu oldukça hızlı hala ve kolayca kısayolları uygulayabilir. Tüm üçgen yüzlerine sahip olduğunuzda, bir köşe v seçin ve her üçgen T ve v ile bir tetrahedron yapın . Hacmi 4 ×Ö(n2)n4n=15vTvKöşe koordinatlarında 4 belirleyici.4x4


2

MATLAB'de köşe sayısı için küçük bir test , her bileşen [ 0 , 1 ] 'de eşit rasgele bir sayıdır :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;

Sonuç:

time_elapse =
              0.014807
Vol =
      0.67880219135839

Oldukça hızlı olduğunu söyleyebilirim, eğer kez çalıştırmak isterseniz , sadece 3 saatten az sürer. İşte böyle:106

convhull

4x4N-=105

time_elapse =
              3.244278
Vol =
     0.998068316875714

7x1051[0,1]3


BTW testi eski 2007 Core 2 T61p cihazımda yapıldı.
Shuhao Cao

2

Komei Fukuda'nın Çokyüzlü Hesaplaması SSS'den :

R,d

Bir V-politop (veya H-politop) hacminin hesaplanmasının # P-sert olduğu bilinmektedir, bakınız [DF88] ve [Kha93]. Konveks bir gövdenin [LS93] hacmini yaklaşık olarak tahmin etmek için teorik olarak verimli randomize algoritmalar vardır, ancak herhangi bir uygulama mevcut görünmemektedir. Dışbükey politoplar için çeşitli hacim hesaplama algoritmalarının karşılaştırmalı bir çalışması [BEF00] vardır. Birçok farklı tipte politop için iyi çalışan tek bir algoritmanın olmadığını gösterir.

[DF88] ME Dyer ve AM Frieze. Bir çokyüzlünün hacmini hesaplamanın karmaşıklığı. SIAM J. Comput. , 17: 967-974,1988.

[Kha93] LG Khachiyan. Politop hacmi hesaplamasının karmaşıklığı. J. Pach'ta editör, Kesikli ve Hesaplamalı Geometride Yeni Eğilimler , sayfa 91-101. Springer Verlag, Berlin, 1993.

L. Lovasz ve M. Simonovits. Dışbükey bir gövdede rastgele yürüyüşler ve geliştirilmiş bir hacim algoritması. Rasgele yapılar ve algoritmalar , 4: 359-412, 1993.

[BEF00] B. Bueler, A. Enge ve K. Fukuda. Dışbükey politoplar için kesin hacim hesabı: Pratik bir çalışma. G. Kalai ve GM Ziegler'de editörler, Polytopes - Kombinatorik ve Hesaplama , DMV-Seminer 29, sayfa 131-154. Birkhauser, 2000.

Bu, Dyer ve Frieze kağıdının başlığına rağmen, 3D probleminin özelliklerini daha yüksek boyutlardaki zorluklar arasında gömmeye benzeyebilir. Özetlerinden: "Ya fasetler listesi ya da köşe noktaları listesi olarak verilen bir çokyüzlünün hacmini hesaplamanın, bir matrisin kalıcıını hesaplamak kadar zor olduğunu gösteriyoruz."

PPN-vvPPPP={xR,3:birxb}

P

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.