basa su articolo di Wikipedia algoritmo online di Bresenham Ho implementato il simplified version descritta lì, la mia implementazione Java assomiglia a questo:Algoritmo di linea semplificato di Bresenham: cosa fa esattamente * esattamente *?
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;
}
}
Ora capisco che err
controlla il rapporto tra i passaggi su l'asse x confronto ai passi sull'asse y - ma ora che dovrei documentare ciò che fa il codice non riesco a esprimere chiaramente, a cosa serve e perché esattamente le if-statement sono, come sono e perché err
è cambiato nel modo visto nel codice.
Wikipedia non punta ad alcun spiegazioni più detagli riguardo o sorgenti, quindi mi chiedo:
Che cosa significa esattamente err
fare e perché sono dx
e dy
utilizzato esattamente nel modo dimostrato di mantenere il corretto rapporto tra i passaggi orizzontali e verticali utilizzando questa versione semplificata dell'algoritmo di linea di Bresenham?
La tua formula è semplificata. Dopo il blocco "if (e2> -dy) {" dovresti avere un altro controllo per vedere se è alla fine, in caso affermativo, quindi tracciare il ciclo. Ci sono casi in cui perderai un punto lungo l'asse x. –