Bresenham
पुराने समय में, जब लोग रेखाओं और वृत्तों को खींचने के लिए अपने स्वयं के मूल वीडियो रूटीन लिख रहे थे, तब उसके लिए ब्रेसेनहैम लाइन एल्गोरिथ्म का उपयोग करना अनसुना नहीं था।
ब्रेसेनहैम इस समस्या को हल करता है: आप स्क्रीन पर एक रेखा खींचना चाहते हैं जो dx
क्षैतिज दिशा में पिक्सल ले जाती है जबकि एक ही समय dy
में ऊर्ध्वाधर दिशा में पिक्सेल फैलाते हैं। लाइनों के लिए एक अंतर्निहित "फ्लोटी" चरित्र है; यहां तक कि अगर आपके पास पूर्णांक पिक्सेल हैं, तो आप तर्कसंगत झुकाव के साथ समाप्त होते हैं।
एल्गोरिथ्म को हालांकि तेज होना चाहिए, जिसका अर्थ है कि यह पूर्णांक अंकगणित का उपयोग कर सकता है; और यह भी बिना किसी गुणा या भाग के, केवल जोड़ और घटाव के बिना दूर हो जाता है।
आप अपने मामले के लिए इसे अनुकूलित कर सकते हैं:
- आपकी "x दिशा" (ब्रेसेनहैम एल्गोरिथ्म के संदर्भ में) आपकी घड़ी है।
- आपकी "y दिशा" वह मूल्य है जिसे आप बढ़ाना चाहते हैं (यानी, आपके चरित्र की स्थिति - सावधान, यह वास्तव में आपके प्रेत का "y" नहीं है या स्क्रीन पर जो भी हो, अधिक अमूर्त मूल्य)
"x / y" यहां स्क्रीन पर स्थान नहीं है, लेकिन समय में आपके आयामों में से एक है। जाहिर है, अगर आपका स्प्राइट स्क्रीन के पार एक अनियंत्रित दिशा में चल रहा है, तो आपके पास कई ब्रेसेनहैम अलग से चलेंगे, 2 डी के लिए, 3 डी के लिए 3।
उदाहरण
मान लीजिए कि आप अपने चरित्र को 0 से 25 तक एक साधारण आंदोलन में अपने एक अक्ष के साथ स्थानांतरित करना चाहते हैं। जैसा कि यह गति 2.5 के साथ आगे बढ़ रहा है, यह 10 फ्रेम में वहां उत्पन्न होगा।
यह (0,0) से (10,25) तक "रेखा खींचना" के समान है। ब्रेसेनहैम की लाइन एल्गोरिटम को पकड़ो और इसे चलने दो। यदि आप इसे सही करते हैं (और जब आप इसका अध्ययन करते हैं, तो यह बहुत जल्दी स्पष्ट हो जाएगा कि आप इसे कैसे सही करते हैं), तो यह आपके लिए (0,0), (1,2), (2) के लिए 11 "अंक" उत्पन्न करेगा। 5), (3,7), (4,10) ... (10,25)।
अनुकूलन पर संकेत
यदि आप उस एल्गोरिथ्म को गूगल करते हैं और कुछ कोड पाते हैं (विकिपीडिया पर एक बहुत बड़ी संधि है), तो कुछ चीजें हैं जिन्हें आपको देखने की आवश्यकता है:
- यह स्पष्ट रूप से
dx
और सभी प्रकार के लिए काम करता है dy
। आप एक विशिष्ट मामले में रुचि रखते हैं (हालांकि, आपके पास कभी नहीं होगा dx=0
)।
- हमेशा की तरह कार्यान्वयन, स्क्रीन पर चतुर्थ भाग में कई अलग अलग मामलों होगा इस पर निर्भर करते
dx
हैं और dy
सकारात्मक, नकारात्मक रहे हैं, और यह भी कि क्या abs(dx)>abs(dy)
है या नहीं। आप निश्चित रूप से यहां जो भी आपकी आवश्यकता है उसे उठाएं। आपको विशेष रूप से यह सुनिश्चित करना होगा कि जो दिशा 1
हर टिक से बढ़ी है वह हमेशा आपकी "घड़ी" दिशा है।
यदि आप इन सरलीकरणों को लागू करते हैं, तो परिणाम वास्तव में बहुत सरल होगा, और किसी भी वास्तविक से पूरी तरह छुटकारा पा लेंगे।