podstawie artykułu Wikipedii na algorytm bresenhama Mam wdrożyła simplified version opisane tam, mój wykonania Java wygląda następująco:Uproszczony algorytm linii Bresenhama: co to * dokładnie * robi?
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;
}
}
Teraz rozumiem, że err
reguluje stosunek między kroków na osi x w porównaniu do kroków na osi Y - ale teraz, gdy mam udokumentować, co robi kod, nie wyrażam jednoznacznie, do czego to służy i dlaczego są one takie, jak są i dlaczego są err
została zmieniona w sposób przedstawiony w kodzie.
Wikipedia nie wskazuje jakichkolwiek bardziej zobaczyć szczegółowe wyjaśnienia lub źródeł, więc zastanawiam się:
Co dokładnie robi err
zrobić i dlaczego dx
i dy
wykorzystywane w taki sposób pokazany w celu utrzymania prawidłowej proporcji między krokami poziomymi i pionowymi, używając tej uproszczonej wersji algorytmu linii Bresenhama?
Twoja formuła uproszczona. Po bloku "if (e2> -dy) {" powinieneś jeszcze raz sprawdzić, czy jest na końcu, jeśli tak, spróbuj przerwać pętlę. Są przypadki, w których stracisz jeden punkt na osi X. –