/ / Confuso nell'algoritmo DDA, serve un po 'di aiuto - algoritmo, grafica, dda

Confuso nell'algoritmo DDA, serve un po 'di aiuto - algoritmo, grafica, dda

Ho bisogno di aiuto per quanto riguarda l'algoritmo DDA, sono confuso dal tutorial che ho trovato online su DDA Algo, ecco il link a quel tutorial

http://i.thiyagaraaj.com/tutorials/computer-graphics/basic-drawing-techniques/1-dda-line-algorithm

Esempio:

xa,ya=>(2,2)
xb,yb=>(8,10)
dx=6
dy=8

xincrement=6/8=0.75
yincrement=8/8=1

1)     for(k=0;k<8;k++)
xincrement=0.75+0.75=1.50
yincrement=1+1=2
1=>(2,2)

2)     for(k=1;k<8;k++)
xincrement=1.50+0.75=2.25
yincrement=2+1=3
2=>(3,3)

Ora voglio chiederlo, come questa linea è arrivata xincrement = 0,75 + 0,75 = 1,50, quando è scritto in teoria che

"Se la pendenza è maggiore di 1, i ruoli di x qualsiasi y sull'unità y intervallano Dy = 1 e calcolano ogni y valori successivi. Dy = 1

m= Dy / Dx
m= 1/ (  x2-x1 )
m = 1 / ( xk+1 – xk  )

xk+1   =  xk   +  ( 1 / m )

"

dovrebbe essere xincrement=x1 (which is 2) + 0.75 = 2.75

o lo capisco male, qualcuno può insegnarmi come è fatto?

Molte grazie)

risposte:

1 per risposta № 1

Sembra che ci sia un po 'di confusione qui.

Per iniziare, supponiamo che 0 <= slope <= 1. In questo caso, si avanza di un pixel alla volta nella direzione X. Ad ogni passo X, hai un valore Y corrente. Quindi si determina se il valore Y "ideale" è più vicino al valore Y corrente o al valore Y successivo più grande. Se è più vicino al valore Y più grande, si incrementa il valore Y corrente. Con una frase leggermente diversa, si capisce se l'errore nell'uso del valore Y corrente è maggiore di mezzo pixel e se si incrementa il valore Y .

Se pendenza> 1, quindi (come menzionato nel tuodomanda) si scambiano i ruoli di X e Y. Cioè, si avanza di un pixel alla volta nella direzione Y e ad ogni passo si determina se è necessario incrementare il valore X corrente.

Le pendenze negative funzionano praticamente allo stesso modo, ad eccezione del decremento invece dell'incremento.


3 per risposta № 2

Le posizioni dei pixel sono valori interi. Le equazioni di linea ideali sono in numeri reali. Pertanto, gli algoritmi di disegno di linee convertono i numeri reali di un'equazione di linea in valori interi. Il modo difficile e lento per tracciare una linea sarebbe valutare l'equazione di linea su ciascun valore x sulla matrice di pixel. Gli analizzatori differenziali digitali ottimizzano questo processo in vari modi.

In primo luogo, i DDA approfittano del fatto che aè noto almeno un pixel, l'inizio della linea. Da quel pixel, gli DDA calcolano il prossimo pixel della linea, fino a raggiungere il punto finale della linea.

In secondo luogo, i DDA approfittano del fatto chelungo l'asse x o y, il pixel successivo nella linea è sempre il successivo valore intero verso la fine della linea. DDA "s individua quale asse valutando la pendenza I pendii positivi tra 0 e 1 incrementeranno il valore x di 1. Pendenze positive maggiori di una incrementeranno il valore di y di 1. Pendenze negative tra -1 e 0 incrementeranno la x valore di -1 e pendenze negative inferiori a -1 incrementeranno il valore di y di -1.

Thrid, DDAs approfitta del fatto che seil cambiamento in una direzione è 1, il cambiamento nell'altra direzione è una funzione della pendenza. Ora diventa molto più difficile da spiegare in generale. Quindi considererò solo pendenze positive tra 0 e 1. In questo caso, per trovare il prossimo pixel da tracciare, x viene incrementato di 1 e viene calcolata la variazione in y.Un modo per calcolare il cambiamento in y è solo aggiungere la pendenza alla y precedente e intorno al valore intero. Questo non funziona se non si mantiene il valore y come numero reale. Pendenze superiori a una possono semplicemente incrementare y di 1 e calcolare la variazione in x.

In quarto luogo, alcuni DDA ottimizzano ulteriormente l'algoritmo evitando calcoli in virgola mobile. Ad esempio, l'algoritmo di linea di Bresenham è un DDA ottimizzato per l'utilizzo dell'aritmetica intera.

In questo esempio, una riga da (2, 2) a (8, 10),la pendenza è 8/6, che è maggiore di 1. Il primo pixel è a (2, 2). Il pixel successivo viene calcolato incrementando il valore y di 1 e aggiungendo la variazione in x (la pendenza inversa, di dx / dy = 6/8 = .75) a x. Il valore di x sarebbe 2,75, che viene arrotondato a 3 e (3, 3) viene tracciato. Il terzo pixel incrementerà nuovamente y, quindi aggiungerà la modifica in x a x (2,75 + 0,75 = 3,5). Arrotondamento traccia il terzo pixel in (4, 4). Il quarto pixel sarebbe quindi tracciato (5, 4), poiché y sarebbe incrementato di 1, ma x sarebbe incrementato di 0,75 e uguale 4,25.

Da questo esempio, puoi vedere il problema con il tuo codice?