matlab - How to get triangles from 3D Delaunay triangulation -


मुझे 3 डी पॉइंट क्लाउड के त्रिकोण को मिला है dt (या शायद टेट्राएड्रैडीजीकरण) और I आप इसे से त्रिकोण निकालने का एक अच्छा तरीका खोजना चाहते हैं I ध्यान दें, मुझे पता है कि टेट्राहेड्रा कैसे प्राप्त करना है, इसकी बस dt.ConnectivityList , क्या टेट्राहेड्रा से त्रिकोण प्राप्त करने का एक कारगर तरीका है? प्रत्येक त्रिकोण सूची में केवल एक बार होना चाहिए।

वर्तमान में I'am निम्नलिखित कर रहा है - यह हालांकि दर्द से धीमा है:

  डीटी = डेलायनेट्रेंगल्यूलेशन ([एक्स वाई जेड]); Tetrahedra = डीटी। कनेक्टिविटीलिस्ट; Tris = सेल (1, आकार (tetrahedra, 1)); टीटी = 1 के लिए टेट्रा में ट्राई के सूचक होते हैं: आकार (टेट्राहेड्रा, 1) vertIds = tetrahedra (tt, :); % शीर्ष निर्देशांक vmask = logical ([0 1 1 1]); Tris {tt} = [vertIds (सर्कशीफ्ट (vmask, [0 0 0])); VertIds (सर्कशीफ्ट (vmask, [1 1 1 1])); VertIds (सर्कशीफ्ट (vmask, [2 2 2 2])); VertIds (सर्कशीफ्ट (vmask, [3 3 3 3]))]; अंत tris = अद्वितीय (सॉर्ट (सेल2mat (ट्राइस '), 2),' पंक्तियाँ ');  

यहां एक vectorised संस्करण है:

 % ले टेट्स से तीन बिंदुओं के सभी चार उपसमुच्चय और ट्राईस 2 को जोड़ना [[टेट्राहेड्रा (:, [1 2 3]); टेट्राहेड्रा (:, [1 2 4]); टेट्राहेड्रा (:, [1 3 4]); टेट्राहेड्रा (:, [2 3 4])]; % प्रत्येक पंक्ति को tris2 = सॉर्ट करें (tris2, 2); % डुप्लिकेट्स tris2 = अद्वितीय को खत्म (tris2, 'पंक्तियाँ');  

100,000 परीक्षण अंक (यादृच्छिक संख्या) के साथ मुझे

  सेलमैथ: समय = 9.870982, संख्याएं = 1344 9 60 Vectmethod: समय = 1.014797, संख्याएं = 1344960 < / कोड> 

Comments