2009-07-06 7 views
13

इस साइट से कैटमूल-रोम स्प्लिंस के बारे में सबसे विस्तृत जानकारी है: http://www.mvps.org/directx/articles/catmull/ यह स्पलीन बनाने के लिए चार बिंदुओं की आवश्यकता का जिक्र करता है। हालांकि यह उल्लेख नहीं करता है कि अंक पी 0 और पी 3 पी 1 और पी 2 के बीच मूल्यों को कैसे प्रभावित करते हैं।कैटमुल-रोम splines - वे कैसे काम करते हैं?

मेरे पास एक और सवाल यह है कि आप निरंतर splines कैसे बनायेंगे? क्या पॉइंट पी 1, पी 2 को पी 4, पी 2 के साथ पी 4, पी 2 बनाकर पी 2, पी 1, पी 2, पी 3, पी 4, पी 5, पी 6 ... पीएन बनाकर यह आसान होगा?

एक और सामान्य सवाल यह है कि कैटमूल रोम स्प्लिंस पर टेंगेंट की गणना कैसे की जाएगी? क्या इसमें स्पिनलाइन पर दो अंक लेना शामिल है (0.01, 0.011 पर कहें) और पाइथागोरस के आधार पर टेंगेंट प्राप्त करने के लिए स्थिति उन इनपुट मानों को निर्देशित करती है?

+0

सामान्य Catmull-रोम भी छोरों और आत्म चौराहे जो एक समस्या हो सकती होने का खतरा है। मैं यहां दिखाए गए सेंट्रिपेटल पैरामीटर का उपयोग करने की दृढ़ता से अनुशंसा करता हूं: http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

उत्तर

8

समीकरण 2 पर एक नज़र डालें - यह वर्णन करता है कि नियंत्रण बिंदु रेखा को कैसे प्रभावित करते हैं। आप P0 और P3P1 से P2 पर वक्र के साथ बिंदुओं को प्लॉट करने के लिए समीकरण में जा सकते हैं। आप यह भी देखेंगे कि समीकरण P1 देता है जब t == 0 और P2 जब t == 1

यह उदाहरण समीकरण सामान्यीकृत किया जा सकता है। आप R0 अंक, R1 है, तो ... RN तो आप RK और RK + 1 के बीच अंक P0 = RK - 1, P1 = RK, P2 = RK + 1 और P3 = RK + 2 साथ समीकरण 2 का उपयोग करके प्लॉट कर सकते हैं।

आप R0 से R1 करने के लिए या RN - 1 से RN को साजिश नहीं कर सकते जब तक कि आप R - 1 और RN + 1 के लिए में खड़े रहने के लिए अतिरिक्त नियंत्रण बिंदुओं को जोड़ने। सामान्य विचार यह है कि आप स्पिनलाइन की गणना करने के लिए अपने सभी पैरामीटर देने के लिए जो भी अंक जोड़ना चाहते हैं उसे अनुक्रम के सिर और पूंछ में जोड़ना चाहते हैं।

आप उनके बीच नियंत्रण बिंदुओं को छोड़कर दो स्प्लिंस में एक साथ जुड़ सकते हैं।आप R0, R1, ..., RN और S0, S1, ... SM है वे में R0, R1, ..., RN - 1, S1, S2, ... SM संयोजित किया जा सकता कहते हैं।

किसी भी बिंदु पर स्पर्श की गणना करने के लिए बस समीकरण के व्युत्पन्न ले 2.

6

Wikipedia article थोड़ा और गहराई में चला जाता है। स्पलीन का सामान्य रूप संबंधित टेंगेंट वैक्टर के साथ इनपुट 2 नियंत्रण बिंदु के रूप में होता है। अतिरिक्त स्पलीन खंडों को तब जोड़ा जा सकता है बशर्ते कि सामान्य नियंत्रण बिंदुओं पर टेंगेंट वैक्टर बराबर हों, जो सी 1 निरंतरता को बरकरार रखता है।

विशिष्ट कैटमुल-रोम रूप में, मध्यवर्ती बिंदुओं पर टेंगेंट वेक्टर पड़ोसी नियंत्रण बिंदुओं के स्थानों द्वारा निर्धारित किया जाता है। इस प्रकार, कई बिंदुओं के माध्यम से सी 1 निरंतर स्पलीन बनाने के लिए, पहले और अंतिम नियंत्रण बिंदु पर नियंत्रण बिंदुओं और टेंगेंट वैक्टरों के सेट की आपूर्ति करना पर्याप्त है। मुझे लगता है कि पीएन पर पी 0 और पीएन - पीएन -1 पर टेंगेंट वेक्टर के लिए पी 1 - पी 0 का मानक व्यवहार है।

T(n) = (P(n - 1) + P(n + 1))/2 

यह भी अपने पहले सवाल का जवाब:

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

+1

मुझे खेद है अगर मुझे कुछ याद आ रहा है, लेकिन क्या आप यह बता सकते हैं कि लेख में कहां से यह सूत्र है? मैं http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Catmull.E2.80.93Rom_spline पर एक अलग दिखता हूं। (मैं गणित में इतना अच्छा नहीं हूं। मैं सिर्फ यह जानना चाहता था कि आपको फॉर्मूला कैसे मिला।) –