अधिकांश पैरामीट्रिक प्रक्षेपवक्रों के लिए इस समस्या के समाधान का अनुमान लगाना संभव है। यह विचार निम्नलिखित है: यदि आप किसी वक्र पर गहराई से ज़ूम करते हैं, तो आप उस बिंदु पर उसके स्पर्शरेखा से वक्र को स्वयं नहीं बता सकते।
इस धारणा को बनाने से, दो वैक्टर (क्यूबिक बेजियर कर्व्स, आदि के लिए तीन) से अधिक कुछ भी पूर्व निर्धारित करने की आवश्यकता नहीं है ।
तो एक वक्र हम बिंदु पर इसके स्पर्शरेखा वेक्टर गणना करते हैं । इस वेक्टर का मानदंड और इस प्रकार एक अवधि लिए यात्रा की गई दूरी को रूप में अनुमानित किया जा सकता । यह इस प्रकार है कि एक दूरी एक अवधि ।M(t)dMdtt∥dMdT∥Δt∥dMdT∥ΔtLL÷∥dMdT∥
आवेदन: द्विघात बेज़ियर वक्र
यदि बेज़ियर वक्र के नियंत्रण बिंदु , और , तो प्रक्षेपवक्र को इस प्रकार व्यक्त किया जा सकता है:ABC
M(t)=(1−t)2A+2t(1−t)B+t2C=t2(A−2B+C)+t(−2A+2B)+A
तो व्युत्पन्न है:
dMdt=t(2A−4B+2C)+(−2A+2B)
आपको बस कहीं पर vectors और संग्रहीत करने की आवश्यकता है। फिर, दिए गए , यदि आप लम्बाई को आगे बढ़ाना चाहते हैं, तो आप निम्न कार्य करते हैं:v⃗ 1=2A−4B+2Cv⃗ 2=−2A+2BtL
t=t+Llength(t⋅v⃗ 1+v⃗ 2)
घन बेज़ियर घटता है
एक ही तर्क चार नियंत्रण बिंदुओं , , और साथ एक वक्र पर लागू होता है :ABCD
M(t)=(1−t)3A+3t(1−t)2B+3t2(1−t)C+t3D=t3(−A+3B−3C+D)+t2(3A−6B+3C)+t(−3A+3B)+A
व्युत्पन्न है:
dMdt=t2(−3A+9B−9C+3D)+t(6A−12B+6C)+(−3A+3B)
हम तीन वैक्टर को रोकते हैं:
v⃗ 1v⃗ 2v⃗ 3=−3A+9B−9C+3D=6A−12B+6C=−3A+3B
और अंतिम सूत्र है:
t=t+Llength(t2⋅v⃗ 1+t⋅v⃗ 2+v⃗ 3)
सटीकता मुद्दों
यदि आप एक उचित फ्रैमरेट पर चल रहे हैं, तो (जिसे फ्रेम की अवधि के अनुसार गणना की जानी चाहिए) काम करने के लिए पर्याप्त रूप से छोटा होगा।L
हालाँकि, आप अत्यधिक मामलों में अशुद्धि का अनुभव कर सकते हैं। यदि बहुत बड़ा है, तो आप गणना को सही तरीके से कर सकते हैं, उदाहरण के लिए 10 भागों का उपयोग करके:L
for (int i = 0; i < 10; i++)
t = t + (L / 10) / length(t * v1 + v2);