2012-01-19 15 views
10

curveTo() का उपयोग कर निम्नलिखित AS3 कि एक वक्र रेखा आकर्षित करेगा लें:मैं वक्र() को पॉइंट्स की सूची में कैसे परिवर्तित कर सकता हूं?

var line:Shape = new Shape(); 

line.x = line.y = 20; 
line.graphics.lineStyle(2, 0xFF0000); 
line.graphics.curveTo(200, 200, 200, 0); 

addChild(line); 

जिसके परिणामस्वरूप दृश्य है:

enter image description here

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

परिणाम इस तरह दिख रहा है (अंक के बीच लगभग 5px का ऑफसेट मानते हुए) समाप्त हो सकता है।

Vector.<Point> = [ 
    new Point(20, 20), 
    new Point(23, 23), 
    new Point(27, 28), 
    new Point(33, 32), 
    new Point(40, 37) 
    /* ...etc... */ 
]; 

परिणाम इस तरह के उदाहरण के लिए प्रोजेक्टाइल कि निम्न पथ का अनुसरण की बारिश बनाने, के रूप में चीजों के लिए उपयोग किया जाएगा:

enter image description here

+0

निर्देशांक तुम भी इस आदमी ब्लॉग की जांच करनी चाहिए: http://www.paultondeur.com/ 2008/03/09/ड्राइंग-ए-क्यूबिक-बेजियर-वक्र-उपयोग-क्रिया-3 /, मैं इसके लिए इसका उपयोग करता हूं। – turbosqel

उत्तर

14

actionscript प्रलेखन पढ़ने से, मैं समझता हूँ कि curveTo एक्शन स्क्रिप्ट में विधि एक वर्गिक बेजियर वक्र उत्पन्न करता है। यू 0 और 1 के बीच (0 शुरू होने के साथ मूल्य पर वक्र के साथ एक मूल्य को जोड़ लिए

control point 1 (p1) = (20,20) 
control point 2 (p2) = (200,200) 
control point 3 (p3) = (200,0) 

:

वक्र तीन "नियंत्रण अंक" है कि आप अपने कोड में निर्दिष्ट के होते हैं बिंदु और 1 समापन बिंदु है) आप बर्नस्टीन बहुपदों को उपयोग कर सकते हैं। एक द्विघात वक्र (अपने मामले) के लिए बहुपद हैं:

B1 = (1 - u) * (1 - u) 
B2 = 2 * u * (1 - u) 
B3 = u * u 

सीधे शब्दों में पैरामीटर मान यू के लिए इन नंबरों की गणना करने और एक साथ उनकी संगत बर्नस्टीन बहुआयामी पद से गुणा नियंत्रण बिंदुओं को जोड़ने।

point on curve at parameter *u* = p1 * B1 + p2 * b2 + p3 * B3 

तो, उदाहरण के लिए, आप की अवस्था के साथ 5 अंक प्राप्त करना चाहते हैं, तो आप वक्र साथ अंक पैरामीटर मान 0, 0.25, 0.5, 0.75 पर गणना, और 1.0

+5

मुझे प्यार है कि आप एक ही वाक्य में "बस" और "बहुपद" का आकस्मिक रूप से उपयोग कैसे करते हैं! – grapefrukt

+0

अब वे विकिपीडिया पर चीजों को इतना जटिल क्यों करते हैं ?! धन्यवाद कप्पामाकी। – chadiik

3

curveTo() प्रयोग किया जाता है एक चतुर्भुज बेजियर वक्र बनाने के लिए, जहां एक बेजियर वक्र की गणना दो अंतराल बिंदुओं के बीच और दो एंकर पॉइंट्स के संबंध में की जाती है, और एक वर्गिक बेजियर वक्र एक होता है जहां एंकर पॉइंट दोनों समान समन्वय होते हैं।

बेजियर वक्रों की गणना कई समीकरणों द्वारा की जाती है जो आपको पथ के साथ दिए गए समय पर पहुंचने वाले बिंदु के लिए एक्स और वाई निर्देशांक खोजने की अनुमति देती हैं, इसलिए यह आपकी आवश्यकताओं को पहले से ही फिट करती है। आप this page पर बेजियर वक्र के बारे में सामान्य जानकारी पा सकते हैं।

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

1

एक बेजियर वक्र एक पैरामीट्रिक फ़ंक्शन है।एक वर्गिक बेजियर वक्र (यानी तीन नियंत्रण बिंदु) इस प्रकार व्यक्त किए जा सकते हैं: एफ (टी) = ए (1 - टी)^2 + बी (1 - टी) टी + सीटी^2 जहां ए, बी और सी अंक हैं और टी शून्य से एक से चला जाता है। कि करने के लिए

x = a(1 - t)^2 + b(1 - t)t + ct^2 

y = d(1 - t)^2 + e(1 - t)t + ft^2 

आप उदाहरण के लिए लाइन समीकरण जोड़ देते हैं तो (y = KX + m), आप तीन समीकरणों और तीन अज्ञात (एक्स के साथ खत्म हो जाएगा,:

यह आपको दो समीकरणों दे देंगे वाई और टी)।

से: How to find the mathematical function defining a bezier curve

इस समीकरण का उपयोग कर, आप एक्स की एक सरणी बना सकते हैं और y

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

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