2009-01-09 14 views
5

घन बेजियर वक्र का अनुमान लगाने का सबसे अच्छा तरीका क्या है? आदर्श रूप से मैं एक समारोह वाई (एक्स) चाहता हूं जो किसी दिए गए एक्स के लिए सटीक वाई मान देगा, लेकिन इसमें प्रत्येक एक्स मान के लिए एक घन समीकरण को हल करना शामिल होगा, जो मेरी आवश्यकताओं के लिए बहुत धीमी है, और संख्यात्मक स्थिरता के मुद्दे हो सकते हैं साथ ही इस दृष्टिकोण के साथ।अनुमानित गैरपरैमेट्रिक क्यूबिक बेजियर

this एक अच्छा समाधान होगा?

+0

यह एक सुंदर लेख है। क्या तुमने इसे पढ़ा? :) – ShreevatsaR

+0

बेशक मैंने किया था! इसके साथ मुख्य मुद्दा यह है कि मैं ऑडियो प्रोसेसिंग के लिए बेजियर का उपयोग कर रहा हूं, जबकि लेख बेजियर वक्र ड्राइंग के साथ चिंतित है, इसलिए इसे ऑडियो के लिए काम करने के लिए कुछ अनुकूलन करने की आवश्यकता होगी। – jtxx000

उत्तर

5

बस क्यूबिक हल करें।

यदि आप बेज़ीयर विमान घटता के बारे में बात कर रहे हैं, जहां एक्स (टी) और वाई (टी) घन बहुपद हैं, तो वाई (एक्स) अपरिभाषित हो सकता है या कई मान हो सकते हैं। एक चरम अपघटन मामला लाइन x = 1.0 होगा, जिसे एक क्यूबिक बेजियर के रूप में व्यक्त किया जा सकता है (नियंत्रण बिंदु 2 अंत बिंदु 1 के समान होता है; नियंत्रण बिंदु 3 अंत बिंदु 4 के समान होता है)। उस स्थिति में, वाई (एक्स) में x! = 1.0 के लिए कोई समाधान नहीं है, और x == 1.0 के लिए अनंत समाधान हैं।

रिकर्सिव उपखंड का एक तरीका काम करेगा, लेकिन मुझे उम्मीद है कि यह क्यूबिक को हल करने से बहुत धीमी होगी। (जब तक आप असामान्य रूप से खराब फ्लोटिंग-पॉइंट क्षमता वाले किसी प्रकार के एम्बेडेड प्रोसेसर के साथ काम नहीं कर रहे हैं।)

आपको कोड खोजने में कोई परेशानी नहीं होनी चाहिए जो एक घन हल करता है जिसे पहले से ही पूरी तरह से परीक्षण और डीबग किया गया है। यदि आप पुनरावर्ती उपखंड का उपयोग करके अपना स्वयं का समाधान लागू करते हैं, तो आपके पास वह लाभ नहीं होगा।

आखिरकार, हाँ, संख्यात्मक स्थिरता समस्याएं हो सकती हैं, जैसे कि जब आप चाहते हैं कि बिंदु टेंगेंट के पास है, लेकिन एक उपविभाजन विधि उन लोगों को दूर नहीं कर देगी। यह सिर्फ उन्हें कम स्पष्ट कर देगा।

संपादित करें: आपकी टिप्पणी का जवाब दें, लेकिन मुझे 300 से अधिक वर्णों की आवश्यकता है।

मैं केवल बेजियर वक्र से निपट रहा हूं जहां y (x) में केवल एक (वास्तविक) रूट है। संख्यात्मक स्थिरता के बारे में, http://en.wikipedia.org/wiki/Cubic_equation#Summary से सूत्र का उपयोग करके, ऐसा लगता है कि यदि आप बहुत छोटे हैं तो समस्याएं हो सकती हैं। - jtxx000

wackypedia आलेख कोई कोड नहीं है। मुझे संदेह है कि आप कुछ कुकबुक कोड पा सकते हैं जो कहीं और उपयोग के लिए तैयार हैं। शायद संख्यात्मक प्राप्तकर्ता या एसीएम एकत्रित एल्गोरिदम link text

अपने विशिष्ट प्रश्न के लिए, और लेख के समान नोटेशन का उपयोग करके, आप केवल शून्य या शून्य के करीब है जब पी शून्य या शून्य के करीब होता है। वे समीकरण द्वारा संबंधित होंगे:
u^^6 + q u^^3 == p^^3 /27
शून्य के पास, आप सन्निकटन का उपयोग कर सकते हैं:
q u^^3 == p^^3 /27
या p/3u == क्ष का घनमूल
तो यू से एक्स की गणना की तरह कुछ शामिल करना चाहिए:

(fabs(u) >= somesmallvalue) ? (p/u/3.0) : cuberoot (q) 

शून्य के करीब "पास" कैसे है? इस पर निर्भर करता है कि आपको कितनी सटीकता की आवश्यकता है। आप मेपल या मैटलैब के साथ कुछ गुणवत्ता का समय व्यतीत कर सकते हैं कि आप किस परिमाण के लिए कितनी त्रुटि पेश की गई है। बेशक, केवल आप जानते हैं कि आपको कितनी सटीकता की आवश्यकता है।

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

यदि आप सही रूट चुनते हैं, तो न्यूटन-रैफसन के एक या अधिक पुनरावृत्तियों में इसकी सटीकता में सुधार हो सकता है।

+0

मैं केवल बेजियर वक्र से निपट रहा हूं जहां y (x) में केवल एक (वास्तविक) रूट है। http://en.wikipedia.org/wiki/Cubic_equation#Summary से सूत्र का उपयोग करके संख्यात्मक स्थिरता के संबंध में, ऐसा लगता है कि यदि आप बहुत छोटे हैं तो समस्याएं हो सकती हैं। – jtxx000

2

हां, डी Casteljau एल्गोरिदम आपके लिए काम करेगा। हालांकि, मुझे नहीं पता कि यह कार्डानो की विधि द्वारा घन समीकरण को हल करने से तेज़ होगा या नहीं।

+0

मैंने सोचा कि यह टी मानों को चुनने के लिए तेज़ी से हो सकता है और फिर टी के लिए एक्स (टी) को हल करने के लिए उन मानों के बिंदुओं के बीच इंटरपोलेट कर सकता है और फिर y (टी) खोज सकता है। – jtxx000

+0

मैं डी कास्टेलजौ के एल्गोरिदम का उपयोग करने और खंडों को "पर्याप्त फ्लैट" होने पर रोकना चाहता हूं। जब सेगमेंट पर्याप्त फ्लैट होते हैं तो यह जांचने के लिए [इस ब्लॉग पोस्ट] पर एक नज़र डालें (http://hcklbrrfnn.wordpress.com/2012/08/20/piecewise-linear-approximation-of-bezier-curves/) । यह विधि 't'-values ​​को चुनने के विपरीत, समान रूप से" चिकनी "वक्र सुनिश्चित करेगी। – Hbf

संबंधित मुद्दे