का उल्लेख भी कर सकते हैं मैंने लंबे समय से ऐसा करने के लिए कोड लिखा था। प्रोजेक्ट मैं परिभाषित 2 डी ऑब्जेक्ट्स पर काम कर रहा था जो टुकड़े की तरह बेजियर सीमाओं का उपयोग कर पोस्टस्सिप्ट पथ के रूप में उत्पन्न किया गया था।
दृष्टिकोण मैं का इस्तेमाल किया गया था:
Let घटता पी, क्यू, बेज़ियर नियंत्रण बिंदुओं से परिभाषित किया जा। क्या वे छेड़छाड़ करते हैं?
नियंत्रण बिंदुओं के बाध्यकारी बक्से की गणना करें। अगर वे ओवरलैप नहीं करते हैं, तो दो घटता अंतर नहीं करते हैं। अन्यथा:
पी.एक्स (टी), पी.ए. (टी), q.x (u), q.y (u)= टी,= 1.0 पर क्यूबिक बहुपद हैं। दूरी वर्ग (पी.एक्स - q.x) ** 2 + (पी.ई. - q.y) ** 2 एक बहुपद है (टी, यू)। शून्य के लिए कोशिश करने और हल करने के लिए न्यूटन-रैफसन का उपयोग करें।= टी के बाहर किसी भी समाधान को छोड़ दें, टी 0 यू= 1.0
एन-आर अभिसरण हो सकता है या नहीं। वक्र अंतर नहीं कर सकते हैं, या एन-आर सिर्फ तब तक उड़ा सकता है जब दो घटता लगभग समानांतर होते हैं। इसलिए एन-आर को काट दें यदि यह कुछ मनमाने ढंग से पुनरावृत्तियों की संख्या के बाद अभिसरण नहीं कर रहा है। यह काफी छोटी संख्या हो सकती है।
यदि एन-आर समाधान पर अभिसरण नहीं करता है, तो एक वक्र (कहें, पी) को दो घटता पी, पीबी में टी = 0.5 में विभाजित करें। यह आसान है, यह सिर्फ मध्यबिंदुओं की गणना कर रहा है, क्योंकि लिंक किए गए आलेख से पता चलता है। फिर घुसपैठ के लिए पुनरावृत्ति परीक्षण (क्यू, पीए) और (क्यू, पीबी)। (ध्यान दें कि पुनरावृत्ति की अगली परत में क्यू पी बन गया है, ताकि पी और क्यू को रिकर्सन के प्रत्येक प्ली पर वैकल्पिक रूप से विभाजित किया जा सके।)
अधिकांश रिकर्सिव कॉल जल्दी से लौटते हैं क्योंकि बाउंडिंग बॉक्स गैर-ओवरलैपिंग होते हैं ।
आपको अजीब मामलों को संभालने के लिए कुछ मनमानी गहराई पर रिकर्सन काटना होगा, जहां दो घटता समानांतर हैं और काफी स्पर्श नहीं करते हैं, लेकिन उनके बीच की दूरी मनमाने ढंग से छोटी है - शायद अंतर का केवल 1 यूएलपी ।
जब आपको कोई छेड़छाड़ मिलती है, तो आप नहीं कर रहे हैं, क्योंकि घन घटता में कई क्रॉसिंग हो सकते हैं।तो आपको अंतरंग बिंदु पर प्रत्येक वक्र को विभाजित करना होगा, और (पीए, क्यूए), (पीए, क्यूबी), (पीबी, क्यूए), (पीबी, क्यूबी), (पीबी, क्यूबी) के बीच अधिक समेकन की जांच करनी होगी।