Algoritmo DDA

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:F L'algoritmo DDA (digital differential analyzer) è un algoritmo di rasterizzazione di linea.

L'algoritmo DDA parte dall'osservazione che la pendenza di una retta passante per i punti p1(x1,y1) e p2(x2,y2) è esprimibile come:

m=y2y1x2x1=ΔyΔx

e che

Δy=m*Δx

Da qui possiamo ricavare che per passare da un punto pi(xi,yi) ad un punto pi+1(xi+1,yi+1) dove xi+1=xi+1, l'aumento di yi+1 rispetto a yi dovrà essere Δy ovvero:

yi+1=yi+Δy=yi+(m*Δx)=yi+(m*1)=yi+m

Algoritmo

Un esempio di algoritmo può essere il seguente:

dx = x2 - x1;
dy = y2 - y1;
m  = dy / dx;
y = y1;
for x from x1 to x2 {
	y = y + m;
	disegna_il_punto(x, round(y) );
}

Errori

Per grandi pendenze l'algoritmo produce uno spargimento di punti come in figura 1.

Figura 1.

Come vediamo è presente un'operazione di arrotondamento ( round(y) ) e le operazioni sono eseguite in virgola mobile per via del valore m; tutti elementi costosi dal punto di vista computazionale.

In questo caso infatti notiamo che m ha un valore di circa 4.2, quindi per ogni incremento sull'asse x di valore 1, sull'asse y incrementeremo di 4 pixels circa. Un accorgimento per correggere questo problema è quello di invertire i parametri, ovvero non ricercheremo più la y ma la x:

xi+1=xi+Δx=yi+(1/m*Δy)=yi+(1/m*1)=xi+1/m

In questo caso si ottiene il risultato in figura 2:

Figura 2.

Template:Portale