क्वाड-एज डेटा संरचना (Delaunay / Voronoi)


18

कम्प्यूटेशनल जियोमीटर या बीजगणित के लिए 2 प्रश्न:

मैं सिर्फ कम्प्यूटेशनल ज्यामिति में गोता लगाने के लिए शुरुआत कर रहा हूं और मैं इसे प्यार कर रहा हूं =)

मैं एक डेलायून त्रिभुज एल्गोरिथ्म को लागू करने के लिए गुइबास और स्टॉल्पी द्वारा प्रसिद्ध लेख "सामान्य उपखंडों के हेरफेर के लिए प्राइमरी और वोरोनोई डायग्राम्स की गणना" को पढ़ने का प्रयास कर रहा हूं । मैं सभी सैद्धांतिक सामानों को छोड़ने के लिए परीक्षा में हूं और समय बचाने के लिए उनके क्वाड-एज डेटा संरचना का वर्णन पढ़ रहा हूं। हालांकि, मुझे लगता है कि लेख में सभी गणित को समझने के लिए इसके लायक हो सकता है यदि संरचना का व्यापक रूप से उपयोग किया जाता है, या सिर्फ इसलिए कि यह सुंदर हो सकता है।

मेरे लिए गणित थोड़ा सघन है। मैं टोपोलॉजी पर पूरी तरह से अनभिज्ञ नहीं हूं, लेकिन उनके किनारे के बीजगणित के वर्णन के लिए अमूर्त बीजगणित का ज्ञान होना आवश्यक है जो मेरे पास नहीं है।

मेरे दो प्रश्न हैं: Delaunay / Voronoi की गणना के अलावा क्वाड-एज संरचना के अन्य अनुप्रयोग क्या हैं? यह एक अत्यंत शक्तिशाली उपकरण की तरह लगता है।

दूसरा प्रश्न; अमूर्त बीजगणित क्या है? यह बहुत अच्छा होगा यदि आप मुझे अमूर्त बीजगणित के लिए एक परिचय का संदर्भ दे सकते हैं, बस इतना पर्याप्त है कि मैं उनके किनारे बीजगणित पर अनुभाग को समझ सकता हूं।

धन्यवाद!


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


मुझे लगता है कि मेरा दूसरा सवाल थोड़ा याद किया गया था। मैं कुछ समूह सिद्धांत जानता हूं। मुझे पता है कि एक रिंग और फील्ड क्या है। यह सिर्फ इतना है कि लेख में वे एक सार बीजगणित को परिभाषित करते हैं : "एक किनारे का बीजगणित एक सार बीजगणित (ई, ई *, वनएक्स, रोट, फ्लिप) संतोषजनक गुण ई 1-ई 5 और एफ 1-एफ 5 है"
बिगबैचस

[...] और मुझे नहीं पता कि इसका क्या मतलब है। यह एक क्षेत्र पर एक बीजगणित नहीं है यह है?
बिगमनैचस

जवाबों:


32

मुझे लगता है कि गुइबास और स्टॉल्पी का "एज अलजेब्रा" औपचारिकता थोड़ा अनावश्यक है।

यह सब वास्तव में आवश्यक है कि वह मौलिक और दोहरे रेखांकन के बीच के अंतर को याद रखे। प्रत्येक चेहरे मौलिक ग्राफ की इसी दोहरी शिखर है * ; प्रत्येक बढ़त मौलिक ग्राफ की इसी दोहरी बढ़त है * ; और प्रत्येक शिखर वी मौलिक ग्राफ की इसी दोहरी चेहरा है v * । प्राइमल एजें प्राइमल कोने को जोड़ती हैं और प्राइमल फेस को अलग करती हैं; दोहरी किनारों दोहरी कोने और अलग दोहरी चेहरे को जोड़ने। किसी भी चीज के दोहरे होना मूल बात है। गुइबास और स्टॉल्पी के पेपर में चित्र 4 देखें:ffeevv

परिमल और दोहरे रेखांकन

गुइबास और स्टॉल्फी प्रत्येक धार (या तो प्राण या दोहरी) के बारे में चार निर्देशित, उन्मुख किनारों के संग्रह के रूप में सोचने का प्रस्ताव करते हैं ; सादगी के लिए, मैं इन डार्ट्स को फोन करूंगा । प्रत्येक डार्ट पॉइंट एक एंडपॉइंट टेल ( ) से दूसरे एंडपॉइंट हेड ( ) तक जाता है , और स्थानीय रूप से दो चेहरे बाएं ( ) और राइट ( ) को अलग करता हैपूंछ ( e ) कॉल करने के लिए समापन बिंदु का चुनाव डार्ट का हैetail(e)head(e)left(e)right(e)tail(e)दिशा , और किस विकल्प का चयन इसकी अभिविन्यास है । (गुइबास और स्टॉल्पी "टेल" और "हेड" के बजाय "ऑर्ग" और "डेस्ट" का उपयोग करते हैं, लेकिन मैं छोटे लेबल पसंद करता हूं, क्योंकि अनावश्यक संकेताक्षर ईविल हैं।)left(e)

किसी भी डार्ट के लिए , गुइबास और स्टॉल्पी तीन संबंधित डार्ट्स:e

  1. : डार्ट छोड़ने वाली पूंछ ( e ) के बाद वामावर्त क्रम में अगलाtailNext()पूंछ()
  2. : "वही" डार्ट के रूप में , लेकिन बाएं ( ) और दाएं ( ) के साथ स्वैप किया गया।फ्लिप()बाएं()सही()
  3. : दोहरी डार्ट देकरe ने अपने मध्य बिंदु के चारों ओर एक चौथाई मोड़ वामावर्त घुमायाघुमाएँ()

टेलनेक्स्ट, रोटेट और फ्लिप

ये तीन कार्य निम्न प्रकार की अद्भुत पहचानों को संतुष्ट करते हैं:

  • सही(tailNext())=बाएं()
  • सही(फ्लिप())=बाएं()
  • सही(घुमाएँ())=सिर()*
  • फ्लिप(फ्लिप())=
  • rotate(rotate(rotate(rotate(e))))=e
  • tailNext(rotate(tailNext(rotate(e))))=e

एक पूरी सूची के लिए, कागज के पृष्ठ 83 देखें (लेकिन सावधान रहें कि लेखक पोस्टफिक्स नोटेशन उपयोग करते हैंe Flipe.Flip

इसके अलावा, इन तीन कार्यों को देखते हुए, कई अन्य उपयोगी कार्यों को परिभाषित किया जा सकता है

  • reverse(e)=rotate(flip(rotate(e)))
  • leftNext(e)=rotate(tailNext(rotate(rotate(rotate(e)))))eleft(e)

अंत में, इन कार्यों को जानना आपको उपखंड की टोपोलॉजी के बारे में पूरी तरह से सब कुछ बताता है, और किसी भी सतह (उन्मुख या नहीं) के किसी भी बहुभुज उपविभाजन को इन तीन कार्यों का उपयोग करके एन्कोड किया जा सकता है।

क्वाड-एज डेटा संरचना एक सतह ग्राफ का एक विशेष रूप से सुविधाजनक प्रतिनिधित्व है जो इन सभी कार्यों के साथ-साथ किनारों को सम्मिलित करने, हटाने, अनुबंध करने, विस्तार करने और फ़्लिप करने जैसे कई अन्य कार्यों तक पहुँच प्रदान करता है; बंटवारे या चेहरे का विलय या विलय; और हैंडल या क्रॉस-कैप को जोड़ना या हटाना।

मज़े करो!


मैंने OmniGraffle का इस्तेमाल किया।
जेफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.