2011-04-29 15 views
11

मैं एक्शनस्क्रिप्ट में एक चित्रकारी अनुप्रयोग बना रहा हूं (althought मेरा सवाल एक्शनस्क्रिप्ट संबंधित नहीं है)। मूल विचार यह है कि जब माउस दबाया जाता है और माउस आंदोलनों को ट्रैक किया जाता है तो पेंटिंग शुरू करना होता है। क्या मैं acchieve चाहते हैं:कुशल रेखा Smoothing (सरलीकृत)

  1. को कम माउस 'शोर' और
  2. अधिक सहज दिखने लाइनों पैदा करते हैं।

अभी समस्याग्रस्त है क्योंकि मुझे कुछ सेकंड के भीतर हजारों माउस मूवमेंट मिलते हैं। (1) के कारण लाइन जाली दिख सकती है। क्या वर्तमान विचार: जब उपयोगकर्ता रेखा को चित्रित करता है, तो मैं सभी आंदोलनों को एक ऐरे में संग्रहीत करता हूं और उन्हें (औसत थ्रेसहोल्ड) को कम करता हूं और फिर एक रेखा को फिर से बनाने के लिए एक स्पलीन एल्गोरिदम का उपयोग करता हूं।

कोई बेहतर दृष्टिकोण?

उत्तर

8

सारा Frisken द्वारा Efficient Curve Fitting देखें। at the author's page भी उपलब्ध है।

+0

मेरे स्वाद के लिए थोड़ा जटिल लेकिन एक अच्छी दिशा। धन्यवाद! – justin

+0

आपके द्वारा प्रदान किया जाने वाला पहला लिंक टूटा हुआ प्रतीत होता है। इसके लिए कोई अन्य लिंक? – Aneem

+2

@ एनीम, http://dx.doi.org/10.1080/2151237X.2008.10129260 और http://www.sarahfrisken.com/efficientCurveFitting.pdf देखें। – lhf

5

(अपने प्रश्न टकरा जबकि एक ही तलाश में, और साथ में अपने स्वयं के के बारे में कुछ डाल करने के लिए हुआ)

http://willowsystems.github.com/jSignature/#/about/linesmoothing/

(एसईओ संगत लिंक एक ही करने के लिए: http://willowsystems.github.com/jSignature/%2523%252Fabout%252Flinesmoothing%252F.html)

मुद्दा आप वर्णन दो गुना है। 1. आप कैप्चर डेटा को 'सरल' बनाना चाहते हैं। 2. आप बिंदुओं के भीतर एक अच्छी दिखने वाली रेखा ('वक्र फिट करें') बनाना चाहते हैं।

ऊपर उद्धृत Simplify.js वास्तव में अच्छा है, लेकिन यह केवल आपको अंक देता है। JSignature के लिए हम एक सुपर-कुशल, गैर-लगी हुई वक्र-फिटिंग एल्गोरिदम चाहते थे।

अंक के बीच एक (हमारे) दृष्टिकोण (बेजियर उर्फ ​​'क्यूबिक') वक्र के बीच दृष्टिकोण के स्पष्टीकरण के लिए उपरोक्त लिंक देखें। यह आपको उपयोगकर्ता को खींचा गया लाइन रखने के लिए अनुमति देता है और अंतिम 2 निर्देशांक को जोड़ने पर बस अंतराल देता है, या आप इस तरह की पूरी लाइन को सरल और पुन: तैयार कर सकते हैं।

(एल्गोरिदम का हमारा प्रकाशन जानबूझकर था, "पूर्व कला" स्थापित करने और संयुक्त विधि की पेटेंटिबिलिटी को रोकने के लिए। इसका मतलब है, हम एल्गोरिदम पर अपना पेटेंट योक नहीं डालते हैं और कड़ी मेहनत करते हैं और नहीं इसे कहीं और पेटेंट करने के लिए ढूंढें। बेशक वहां कुछ पेटेंट ट्रॉल हो सकते हैं जो आपको विधि को कार्यान्वित करने में कोई समस्या पा सकते हैं, लेकिन, कम से कम, हमें नहीं। इसलिए, आनंद लें।)

डेमो लिंक का उपयोग कर रहा है माउस आंदोलन पर 4-पिक्सेल छोड़ें। यह कच्चा है, लेकिन डेटा के वास्तविक समय 'सरलीकरण' के लिए ठीक है। यदि आपके पास पूरे स्ट्रोक को कैप्चर करने और इसे सब कुछ फिर से निकालने की लक्जरी है, तो निश्चित रूप से, simplify.js का उपयोग करें।

+0

क्या आपके पास प्रश्न में एल्गोरिदम का एक साफ उदाहरण है? कुछ जो 4 अंक के लिए बुलाया जा सकता है और एक फिट बेजियर लौटा सकता है? –

2

माइक Bostock में कुछ अच्छे उदाहरण हैं Line Simplification। उन्होंने बताया कि Douglas-Peucker एल्गोरिदम अच्छी तरह से जानते हैं। हालांकि Visvalingam अधिक प्रभावी प्रतीत होता है।

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