[risolto] algoritmo linea wiki incompleto

Algoritmi, discussioni sulle possibili implementazioni, matematica, fisica e tutti gli argomenti correlati alla programmazione
Rispondi
Avatar utente
CaMpIoN
Membro super
Messaggi: 684
Iscritto il: 17/11/2009, 16:20
Specialità: Programmatore
Uso: GM:Studio 1.4 Master
Contatta:

Re: [risolto] algoritmo linea wiki incompleto

Messaggio da CaMpIoN »

Xeryan ha scritto:...

Codice: Seleziona tutto

var swaps, a, b, d, xx, yy, s, q, oldX,
    DX = argument2 - argument0,
    DY = argument3 - argument1;

//siccome scambio DY e DX ho sempre DX>=DY allora per sapere quale coordinata occorre cambiare uso una variabile
swaps = false;

if (DY > DX) {
   oldX = DX;
   DX = DY;
   DY = oldX;
   swaps = true;
}

//per non scrivere sempre i valori assoluti cambio DY e DX con altre variabili
a = abs(DY);
b = -abs(DX);
    
//il valore d0
d = 2 * a + b;

//assegna le coordinate iniziali
xx = argument0;
yy = argument1;
draw_point(xx, yy);

//s e q sono gli incrementi/decrementi di x e y
s = 1;
q = 1;
if (argument0 > argument2) q = -1;
if (argument1 > argument3) s = -1;

for (var k=0; k<DX; k++) {
   if (d >= 0) {
      d = 2 * (a + b) + d;
      yy = yy + s;
      xx = xx + q;
    } else {
      if (swaps) {
         yy = yy + s;
       } else {
         xx = xx + q;
      }
      
      d = 2 * a + d;
   }
   
   draw_point(xx, yy);
}
http://it.wikipedia.org/wiki/Algoritmo_ ... _Bresenham
:shock: Quell'algoritmo l'ho messo io e a me funziona, e tutt'ora utilizzo quello quando mi serve conoscere i punti di una linea, forse l'hanno cambiato e hanno commesso qualche errore devo riprovarlo.

EDIT: L'ho confrontato con uno che avevo già salvato e evidentemente è stato cambiato in modo molto sbagliato, l'ho aggiustato ora dovrebbe funzionare.
Giochi da me creati:
Spoiler
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti