2012-08-09 15 views
9

क्या जावास्क्रिप्ट लाइब्रेरी मौजूद है जो पथों (बेजियरकर्व) पर बुलियन ऑपरेशन कर सकती है? मैं paper.js और raphael.js के बारे में जानता हूं, लेकिन दोनों इन क्रियाओं को निष्पादित नहीं कर सकते हैं।बूलियन ऑपरेशंस के साथ जावास्क्रिप्ट वक्र लाइब्रेरी

बधाई फिलिप इस का उपयोग करने के

+0

तुम्हारा मतलब आप घटता तुलना करना चाहते हैं , और समानता की जांच करें? – Aesthete

+0

मेरा मतलब यूनियन, चौराहे, अंतर जैसे बूलियन ऑपरेशंस है। हो सकता है कि वक्र इसके लिए गलत धारणा है, लेकिन ये ऑपरेशन एडोब इलस्ट्रेटर या इनक्सस्केप जैसे सभी वेक्टर ग्राफिक अनुप्रयोगों में मानक हैं। यहां देखें: http://www.angelfire.com/mi/kevincharles/inkscape/p7c4.html – philipp

+0

http://stackoverflow.com/questions/109364/bezier-clipping/3005394#3005394 के बारे में क्या? – artistoex

उत्तर

3

आप बहुभुज के लिए पथ (जैसे pathelement.getPointAtLength (का उपयोग कर परिवर्तित हैं)), तो आप जावास्क्रिप्ट क्लिपर का उपयोग कर सकते हैं, जो लोकप्रिय एंगस जॉनसन क्लिपर लाइब्रेरी का जावास्क्रिप्ट पोर्ट है।

इस अंतर का एक उदाहरण है, लेकिन यह भी Union, Intersect and Xor संभव हो रहे हैं: Difference of polygons

जावास्क्रिप्ट क्लिपर के पेज here है।

यदि getPointAtLength() बहुत अधिक अंक देता है, जावास्क्रिप्ट क्लिपर में एक फ़ंक्शन ClipperLib.Lighten() है, जो बिंदु गणना को काफी कम कर सकता है।

लाइब्रेरी बहुभुज ऑफसेटिंग का भी समर्थन करता है। live demo देखें।


संपादित करें: परीक्षण के बाद मैं पुष्टि कर सकता हूं कि pathelement.getPointAtLength() उदाहरण के लिए सबसे उपयुक्त है। हिट परीक्षण, लेकिन इस मामले में बहुभुज करने के लिए इतना अच्छा नहीं है, क्योंकि यह बहुत कम या बहुत अधिक अंक पैदा करता है और वक्रता को ध्यान में रखता नहीं है। यह तथ्य है कि तंग वक्रों को अधिक अंक और ढीले घटता की आवश्यकता होती है। सभी पथ खंडों को घनत्व घटता में परिवर्तित करना बेहतर है और पॉलीगोनिंग वक्र के लिए कुछ अनुकूली एल्गोरिदम का उपयोग करना बेहतर है। मैंने कुछ परीक्षण किए हैं और जल्द ही बहुभुजान के लिए एक बेहतर तरीका पेश कर सकते हैं।

संपादित करें: मैंने एसवीजी पथ पॉलीगोनिज़िंग फ़ंक्शन को कार्यान्वित करने में कामयाब रहा है, जो सभी प्रकार के पथों को संभालता है और रूपांतरणों को भी झुकाता है। हजारों यादृच्छिक रूप से जेनरेट किए गए पथ और परिवर्तनों का परीक्षण करने के बाद यह विश्वसनीय लगता है। इसके अलावा सभी संभावित अपमानजनक मामलों (जहां वक्र कॉललाइनर हैं या कुछ बिंदु समान हैं) मुद्दों के बिना संभाले जाते हैं। हालांकि यह काफी कम अंक पैदा करते समय देशी getPointAtLength() से पहले से कहीं अधिक तेज़ और अधिक सटीक है, इस प्रक्रिया में उदाहरण के उपयोग से गति सुधार के लिए जगह है। atan2() के बजाय टैक्सीकैब कोण और कोड को पूरी तरह से वेब वर्कर्स को सभी डीओएम विधियों को हटाकर संगत बनाते हैं। मैं इसे प्रकाशित करने से पहले इसे 100% बगफ्री बनाना चाहता हूं। यह आदर्श उपयोग मामला है उदाहरण के लिए। जेनरेट बहुभुज के साथ बुलियन ऑपरेशन करने की संभावना।

+0

यह एक अच्छा है!मैं इसे अगले दिन कोशिश करूंगा ... – philipp

6

Paper.js अब अपने मूल में बूलियन कार्य किया है:

https://github.com/paperjs/paper.js/blob/master/src/path/PathItem.Boolean.js

और यहाँ आप कार्रवाई में आपरेशन देख सकते हैं:

http://assets.paperjs.org/boolean/

+0

शांत! बहुत अच्छा! – philipp

+1

मैंने कोशिश की और दो मंडलियों को एकजुट करने से पहले ही कुछ महत्वपूर्ण बग दिखाए गए हैं। –

+0

उपरोक्त तिमो से क्लिपर बहुत विश्वसनीय है। मेरे पास यह एक वेबपैप है जिसे हमने टिमो के साथ विकसित किया है और यह गति और विश्वसनीयता दोनों में असाधारण है। केवल समस्या वक्रों का बहुभुजीकरण है, लेकिन यदि छोटे अंतराल में किया जाता है तो दृश्य परिणाम अलग-अलग होता है। वक्र बूलियन ऑपरेशन सही होने के लिए कुख्यात रूप से कठिन हैं इसलिए पेपर.जेएस बूलियन ओप्स के साथ अधिक बग की अपेक्षा करें। बस मेरी राय –

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