2013-03-27 6 views
5

JSON समन्वय की एक श्रृंखला को देखते हुए आम तौर पर प्रारूप में:परस्पर घुमावदार लाइनों

{from: {x:0, y:0}, to: {x:0, y:10}, ...} 

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

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

Path

मैं बाहर सार करने के लिए ड्राइंग तर्क और इसलिए एक जावास्क्रिप्ट बिंदु सरणी लौटने के लिए एक सामान्यीकृत दृष्टिकोण है जो मैं तो कई मायनों में प्रदान कर सकते हैं (इसलिए मैं किसी भी इनबिल्ट का उपयोग कर से बचने कर रहा हूँ की मांग कर रहा हूँ चाहते हैं एसवीजी, कैनवास आदि द्वारा प्रदान किए गए कार्यों)।

+1

कितना कम्प्यूटेशनल संसाधन डालने को तैयार है? यदि आपके पास कोई प्रतिबंध नहीं है, तो आप एक अंडाकार फिट कर सकते हैं जैसे कि यह पी 1 और पी 2 को जोड़ता है और इसकी ढलान लाइनों की ढलान से मेल खाती है। – ElKamina

+0

आपके कार्यक्रम का आउटपुट क्या होना चाहिए? –

+0

"बिंदीदार रेखाएं (अंक), जो कोनों से जुड़े हुए हैं" - इसका क्या अर्थ है? –

उत्तर

1

आप जो चाहते हैं वह एक क्यूबिक बेजियर वक्र है। इस पृष्ठ पर पहले एप्लेट में

http://www.blackpawn.com/texts/splines/

देखो। यदि ए पी 1 है, डी पी 2 है, तो दिशा एबी लाइन 1 का कोण है और दिशा सीडी लाइन 2 के कोण है, आप देख सकते हैं कि यह आपको किस गुण की आवश्यकता है - यह कोण 1 से शुरू होता है और कोण 2 पर समाप्त होता है और साथ फ्लश होता है बिंदु।

तो, अपने अंक सी और डी प्राप्त करने के लिए, ऐसा करने का एक तरीका लाइन सेगमेंट 1 लेना होगा, इसे कॉपी करें, इसे पी 1 से शुरू करें - और कहें कि नई लाइन समाप्त होती है बी, और इसी तरह के लाइन सेगमेंट 2 और पी 2 के लिए पी 2 (और आप चीजों की तरह चीजें कर सकते हैं जैसे प्रतिलिपि लाइन सेगमेंट में घुमाएं 'वक्र को कम या ज्यादा कम करने के लिए दूरी ... आदि)

फिर बस गणित करें :)

http://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves

और जैसे ही आप की अवस्था के लिए अपने समीकरण है, इसके माध्यम से वांछित precisio की एक डेल्टा टी के साथ कदम एन (उदा। प्रत्येक 0.1 टी, प्रत्येक 0.01 ...) और एक रेखा खंड के रूप में वक्र पर अंक की हर जोड़ी बाहर थूक।

+0

आपका लिंक वक्र के इंटरपोलेशन नहीं, एक वास्तविक चर के फ़ंक्शन का इंटरपोलेशन दिखाता है। (Denominator में (x2-x1) है) –

+0

@ इवान कुकर आप सही हैं, मैं शर्मिंदा हूं। मैं एक बेहतर एल्गोरिदम की तलाश करूंगा। – Patashu

+0

बीटीडब्ल्यू। मुझे पता है, क्योंकि मैं इसे कार्यान्वित कर रहा था :) http://blog.ivank.net/interpolation-with-cubic-splines.html फ़ोटोशॉप वक्र उस इंटरपोलेशन का उपयोग करते हैं। –

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