/ / Confused w algorytmie DDA, potrzebuję pomocy - algorytm, grafika, dda

Mylić w algorytmie DDA, potrzebuję pomocy - algorytm, grafika, dda

Potrzebuję pomocy dotyczącej algorytmu DDA, jestem zdezorientowany przez samouczek, który znalazłem online w DDA Algo, tutaj jest link do tego samouczka

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

Przykład:

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)

Teraz chcę zapytać, jak ta linia przyszła xincrement = 0,75 + 0,75 = 1,50, gdy jest napisane w teorii, że

"Jeśli nachylenie jest większe niż 1, role x dowolnych y w odstępach jednostki y Dy = 1 i obliczają każdą kolejną wartość y. Dy = 1

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

xk+1   =  xk   +  ( 1 / m )

"

powinno być xincrement=x1 (which is 2) + 0.75 = 2.75

lub rozumiem to źle, czy ktoś może nauczyć mnie, jak to się stało?

Wielkie dzięki)

Odpowiedzi:

1 dla odpowiedzi № 1

Wydaje się, że tutaj jest trochę zamieszania.

Na początek przyjmijmy 0 <= nachylenie <= 1. W tym przypadku przesuwasz o jeden piksel naraz w kierunku X. Na każdym kroku X masz aktualną wartość Y. Następnie należy ustalić, czy "idealna" wartość Y jest bliższa aktualnej wartości Y, czy też następnej większej wartości Y. Jeśli jest bliżej większej wartości Y, zwiększasz aktualną wartość Y. Wyrażone nieco inaczej, ustalasz, czy błąd w używaniu aktualnej wartości Y jest większy niż połowa piksela, a jeśli to Ty, zwiększ wartość Y .

Jeśli nachylenie> 1, to (jak wspomniano w twoimpytanie) zamieniasz role X i Y. Oznacza to, że przesuwasz o jeden piksel naraz w kierunku Y, i na każdym kroku określasz, czy powinieneś zwiększyć swoją aktualną wartość X.

Negatywne nachylenia działają prawie tak samo, z wyjątkiem zmniejszania zamiast zwiększania.


3 dla odpowiedzi № 2

Lokalizacje pikseli to liczby całkowite. Idealne równania linii są liczbami rzeczywistymi. Tak więc algorytmy rysowania linii konwertują rzeczywiste liczby równań liniowych na wartości całkowite. Twardym i powolnym sposobem narysowania linii byłoby oszacowanie równania liniowego dla każdej wartości x w macierzy pikseli. Cyfrowe analizatory różnicowe optymalizują ten proces na wiele sposobów.

Po pierwsze, DDA wykorzystują fakt, że naprzynajmniej jeden piksel jest znany, początek linii. Z tego piksela DDA obliczyć następny piksel w linii, aż dotrą do punktu końcowego linii.

Po drugie, DDA wykorzystują fakt, żewzdłuż osi x lub y, następny piksel w linii jest zawsze następną liczbą całkowitą w kierunku końca linii. DDA oblicza oś, oceniając nachylenie, a dodatnie nachylenia od 0 do 1 zwiększą wartość x o 1. Dodatnie nachylenia większe od jednej zwiększą wartość y o 1. Ujemne nachylenia między -1 a 0 zwiększą x wartość -1, a ujemne nachylenia mniejsze niż -1 spowoduje zwiększenie wartości y o -1.

Thrid, DDA wykorzystują fakt, że jeślizmiana w jednym kierunku wynosi 1, zmiana w drugim kierunku jest funkcją nachylenia. Teraz znacznie trudniej jest wyjaśnić ogólniki. Dlatego rozważę tylko dodatnie nachylenia między 0 a 1. W tym przypadku, aby znaleźć następny piksel do wykreślenia, x jest zwiększane o 1, a zmiana y jest obliczana. Jednym ze sposobów obliczania zmiany w y jest po prostu dodawanie nachylenie do poprzedniego y, i zaokrąglenie do wartości całkowitej.Nie działa to dopóki nie utrzymasz wartości y jako liczby rzeczywistej. Zbocza większe niż jeden mogą po prostu zwiększyć y o 1 i obliczyć zmianę w x.

Po czwarte, niektóre DDA dalej optymalizują algorytm, unikając obliczeń zmiennoprzecinkowych. Na przykład algorytm linii Bresenhama to DDA zoptymalizowany do używania arytmetycznych liczb całkowitych.

W tym przykładzie linia od (2, 2) do (8, 10),nachylenie wynosi 8/6, czyli jest większe niż 1. Pierwszy piksel ma wartość (2, 2). Następny piksel oblicza się, zwiększając wartość y o 1 i dodając zmianę x (nachylenie odwrotne, dx / dy = 6/8 = .75) do x. Wartość x wyniesie 2,75, zaokrągloną do 3, i (3, 3). Trzeci piksel ponownie zwiększy y, a następnie doda zmianę x do x (2,75 + 0,75 = 3,5). Zaokrąglenie wykreśli trzeci pik w (4, 4). Czwarty piksel byłby wówczas wykreślony (5, 4), ponieważ y byłby zwiększany o 1, ale x byłby zwiększany o 0,75, a równy 4,25.

Z tego przykładu, czy widzisz problem z kodem?