Bresenham की लाइन एल्गोरिथ्म पर विकिपीडिया के लेख के आधार पर मैं क्रियान्वित किया है simplified version वहाँ वर्णित है, मेरे जावा कार्यान्वयन इस तरह दिखता है:सरलीकृत ब्रेसेनहम की लाइन एल्गोरिदम: यह * बिल्कुल * क्या करता है?
int dx = Math.abs(x2 - x1);
int dy = Math.abs(y2 - y1);
int sx = (x1 < x2) ? 1 : -1;
int sy = (y1 < y2) ? 1 : -1;
int err = dx - dy;
while (true) {
framebuffer.setPixel(x1, y1, Vec3.one);
if (x1 == x2 && y1 == y2) {
break;
}
int e2 = 2 * err;
if (e2 > -dy) {
err = err - dy;
x1 = x1 + sx;
}
if (e2 < dx) {
err = err + dx;
y1 = y1 + sy;
}
}
अब मुझे समझ नहीं है कि err
नियंत्रण x- अक्ष पर चरणों के बीच अनुपात की तुलना वाई-अक्ष पर कदम उठाने के लिए - लेकिन अब मुझे यह दस्तावेज करना है कि कोड क्या कर रहा है, मैं स्पष्ट रूप से व्यक्त करने में विफल रहता हूं, इसके लिए क्या है, और बिल्कुल if-statement हैं, वे कैसे हैं, और क्यों err
कोड में दिखाई देने के तरीके में बदल दिया गया है।
विकिपीडिया किसी भी अधिक विस्तृत स्पष्टीकरण या सूत्रों को इंगित नहीं करता, तो मैं सोच रहा हूँ:
ठीक err
क्या करता है और क्यों कर रहे हैं dx
और dy
वास्तव में पता चला तरह से इस्तेमाल किया सही अनुपात बनाए रखने के लिए क्या ब्रेसेनहम के लाइन एल्गोरिदम के इस सरलीकृत संस्करण का उपयोग कर क्षैतिज और लंबवत चरणों के बीच?
सरलीकृत पर आपका सूत्र। "अगर (ई 2> -dy) {" ब्लॉक के बाद आपको यह देखने के लिए एक और जांच होनी चाहिए कि क्या यह अंत में है, यदि हां, तो प्लॉट फिर लूप को तोड़ दें। ऐसे मामले हैं जहां आप एक्स अक्ष के साथ एक बिंदु याद करेंगे। –