आप जो देख रहे हैं उसे पूरा करने के कई तरीके हैं, इस पर निर्भर करते हुए कि आप इसे कैसे व्यवहार करना चाहते हैं। मैं वक्र हेरफेर पर बिंदु के माध्यम से एक बेजियर वक्र को संशोधित करने के कुछ सरल तरीकों को समझाऊंगा।
ऐसा करने वाली पहली बात पैरामीटर मान (टी) को समझती है जहां उपयोगकर्ता वक्र पर क्लिक करता है। यह आम तौर पर एक अनुमान होने जा रहा है। यदि आप बेजियर के पिक्सेल या सब-पिक्सेल प्रतिपादन कर रहे हैं, तो बस प्रत्येक पिक्सेल के लिए रिकॉर्ड करें कि टी मान क्या था और इसका उपयोग करें। यदि आप लाइन सेगमेंट में टेसेलेट कर रहे हैं, तो देखें कि कौन सा लाइन सेगमेंट निकटतम है, दो अंत बिंदुओं के टी मानों को ढूंढें, और लाइन के साथ दूरी के अनुसार टी मान को कम करें।
एक बार आपके पास टी मान होने के बाद, आप इसे बेज़ीयर वक्र समीकरण में प्लग कर सकते हैं। आपको फ़ॉर्म की कुछ के साथ खत्म हो जाएगा:
P = k0*P0 + k1*P1 + k2*P2 + k3*P3
जहां पी वक्र, P0, P1, P2 पर बिंदु है, और पी 3 इनपुट नियंत्रण अंक हैं, और K0, k1, k2, और K3 दिए गए टी के लिए स्थिरांक हैं। मैं के मूल्यों 'योगदान', या अधिक विशेष रूप से नियंत्रण बिंदुओं के योगदान वक्र पी (टी) पर बिंदु पर कॉल करेंगे। याद रखने के लिए एक अच्छी संपत्ति यह है कि k0 + k1 + k2 + k3 = 1.
तो मान लें कि आपके पास वेक्टर वी = पी '- पी है, जहां पी' नई स्थिति है और पी मूल स्थिति है। हमें पी को पाने के लिए कुछ नियंत्रण बिंदुओं को स्थानांतरित करने की आवश्यकता है, जहां इसे जाना है, लेकिन हमारे पास कुछ नियंत्रण बिंदु हैं जिनके बारे में हम स्थानांतरित करना चाहते हैं। गैर-शून्य योगदान वाले किसी भी बिंदु का उपयोग किया जा सकता है, या कुछ संयोजन।
मान लें कि उपयोगकर्ता टी = 0 पर वक्र पर क्लिक करता है। इस मामले में, केवल k0 गैर-शून्य है, इसलिए
P0 := P0 + V
सही परिणाम देगा। यह भी रूप में
P0 := P0 + k0 * V
लिखा जा सकता है सामान्य मामले में जहां योगदान के सभी अशून्य हैं में, आप अंक से प्रत्येक के लिए एक ही परिवर्तन लागू कर सकते हैं, जो एक बहुत चिकनी, फैल-आउट के प्रभाव पड़ेगा विरूपण।
एक और विकल्प केवल संपूर्ण बिंदु के अधिकतम योगदान के साथ नियंत्रण बिंदु को स्थानांतरित करना है। मुझे लगता है कि समीकरण का उपयोग करने की तरह
Pmax := Pmax + 1/kmax * V
कुछ होगा, लेकिन किसी भी तरह से यह किसी दिए गए टी मूल्य पर योगदान को देखते हुए, और नियंत्रण बिंदुओं को ले ताकि नए बिंदु इच्छित स्थान में निहित करने के लिए निर्भर करता है।
यह दृष्टिकोण काफी सामान्य है, और NURBS और अधिकांश अन्य splines, यहां तक कि सतहों के लिए भी काम करता है। एक और तरीका है जो काफी आम है जो Greville Abscissae का उपयोग करता है, जो जितना संभव हो उतना अंक पिन करता है, लेकिन मेरे अनुभव में यह उत्तेजना प्राप्त करना बहुत आसान है।
मुझे यह उल्लेख करना चाहिए कि बेजियर के साथ निकटतम नियंत्रण बिंदुओं को प्राप्त करने के लिए आप निकटतम 3-बिंदु घटता की स्ट्रिंग बनाना चाहते हैं। प्रत्येक वक्र का अंत बिंदु अगले वक्र के प्रारंभ बिंदु के बराबर सेट होता है। फिर, दो मिडपॉइंट्स दोनों तरफ के जुड़ने वाले बिंदुओं के दोनों तरफ जुड़ने के बिंदु के चारों ओर दर्पण के लिए सेट किया जाना चाहिए, जिससे उनके बीच एक चिकनी जुड़ाव हो सके। हालांकि, वक्र अभी भी मध्यबिंदुओं से गुजरेंगे। –