Bresenham
পুরাতন সময়ে, লোকেরা যখন লাইন এবং চেনাশোনাগুলি আঁকার জন্য তাদের নিজস্ব বেসিক ভিডিও রুটিনগুলি লিখছিল তখন সে জন্য ব্রেসেনহ্যাম লাইন অ্যালগরিদম ব্যবহার করা শোনা যায় নি।
ব্রেনহ্যাম এই সমস্যাটি সমাধান করে: আপনি পর্দার একটি লাইন আঁকতে চান যা dx
পিক্সেলগুলি অনুভূমিক দিকের দিকে চালিত করে যখন একই সময়ে dy
উল্লম্ব দিকটিতে পিক্সেল বিস্তৃত করতে পারে। লাইনগুলিতে একটি সহজাত "ভাসমান" চরিত্র রয়েছে; আপনার পূর্ণসংখ্য পিক্সেল থাকলেও, আপনি যুক্তিযুক্ত প্রবণতা দিয়ে শেষ করেন।
অ্যালগরিদম যদিও দ্রুত হতে হবে, যার অর্থ এটি কেবল পূর্ণসংখ্যার গাণিতিক ব্যবহার করতে পারে; এবং এটি কোনও গুণ বা বিভাগ ছাড়াই চলে যায়, কেবল সংযোজন এবং বিয়োগফল।
আপনি আপনার ক্ষেত্রে এটি মানিয়ে নিতে পারেন:
- আপনার "এক্স দিকনির্দেশ" (ব্রেসেনহ্যাম অ্যালগরিদমের নিরিখে) আপনার ঘড়ি।
- আপনার "y দিকনির্দেশ" হ'ল মানটি যা আপনি বাড়িয়ে তুলতে চান (অর্থাত্ আপনার চরিত্রের অবস্থান - যত্নবান, এটি আসলে আপনার স্প্রাইটের "y" নয় বা স্ক্রিনে যা কিছু আছে, আরও বিমূর্ত মান)
"x / y" এখানে পর্দার অবস্থান নয়, তবে আপনার সময়কালের একটি মাত্রার মান। স্পষ্টতই, যদি আপনার স্প্রিটটি স্ক্রিন জুড়ে একটি স্বেচ্ছাসেবী দিকে চলমান থাকে তবে আপনার একাধিক ব্রেসেনহ্যাম আলাদাভাবে চলবে, 2 ডি এর জন্য 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
প্রতিটি টিক দিয়ে যে দিকটি বাড়িয়েছে তা সর্বদা আপনার "ঘড়ি" দিক is
আপনি যদি এই সরলীকরণ প্রয়োগ করেন তবে ফলাফলটি খুব সহজ হবে এবং কোনও বাস্তব থেকে সম্পূর্ণ মুক্তি পাবে।