/ / Verwirrt in DDA-Algorithmus, brauche Hilfe - Algorithmus, Grafik, dda

Verwirrt in DDA-Algorithmus, brauche Hilfe - Algorithmus, Grafik, dda

Ich brauche Hilfe in Bezug auf DDA-Algorithmus, ich bin verwirrt durch das Tutorial, das ich online auf DDA Algo gefunden habe, hier ist der Link zu diesem Tutorial

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

Beispiel:

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)

Jetzt möchte ich fragen, wie diese Linie xincrement = 0.75 + 0.75 = 1.50 kam, wenn es in der Theorie geschrieben wird

Wenn die Steigung größer als 1 ist, sind die Rollen von x any y in der Einheit y Intervalle Dy = 1 und berechnen jeweils aufeinanderfolgende y-Werte. Dy = 1

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

xk+1   =  xk   +  ( 1 / m )

"

es sollte sein xincrement=x1 (which is 2) + 0.75 = 2.75

oder ich verstehe es falsch, kann mir bitte jemand beibringen, wie es gemacht wurde?

Danke vielmals)

Antworten:

1 für die Antwort № 1

Hier scheint etwas Verwirrung zu herrschen.

Nehmen wir als erstes an, dass 0 0 <= Steigung <= 1 ist. In diesem Fall bewegen Sie jeweils ein Pixel in X-Richtung. Bei jedem X-Schritt haben Sie einen aktuellen Y-Wert. Sie ermitteln dann, ob der "ideale" Y-Wert näher an Ihrem aktuellen Y-Wert oder dem nächstgrößeren Y-Wert liegt. Wenn es näher an dem größeren Y-Wert ist, erhöhen Sie Ihren aktuellen Y-Wert. Etwas anders ausgedrückt, finden Sie heraus, ob der Fehler bei der Verwendung des aktuellen Y-Werts größer als ein halbes Pixel ist, und wenn Sie Ihren Y-Wert erhöhen .

Wenn die Steigung> 1 ist, dann (wie in IhremFrage) Sie tauschen die Rollen von X und Y aus. Das bedeutet, dass Sie jeweils um ein Pixel in Y-Richtung vorrücken und bei jedem Schritt bestimmen, ob Sie Ihren aktuellen X-Wert erhöhen sollen.

Negative Steigungen funktionieren fast gleich, außer dass Sie dekrementieren anstatt zu inkrementieren.


3 für die Antwort № 2

Pixelpositionen sind ganzzahlige Werte. Ideale Liniengleichungen sind in reellen Zahlen. Linienzeichnungsalgorithmen konvertieren also die reellen Zahlen einer Liniengleichung in ganzzahlige Werte. Der harte und langsame Weg, eine Linie zu zeichnen, wäre, die Liniengleichung bei jedem x-Wert auf Ihrem Pixel-Array auszuwerten. Digitale Differenzanalysatoren optimieren diesen Prozess auf verschiedene Arten.

Erstens, DDAs nutzen die Tatsache, dass beimindestens ein Pixel ist bekannt, der Anfang der Zeile. Von diesem Pixel berechnen die DDAs das nächste Pixel in der Linie, bis sie den Endpunkt der Linie erreichen.

Zweitens nutzen DDAs den Vorteil, dassentlang der X- oder Y-Achse ist das nächste Pixel in der Zeile immer der nächste ganzzahlige Wert gegen Ende der Zeile. DDA's ermitteln die Achse durch Auswertung der Steigung. Bei positiven Steigungen zwischen 0 und 1 wird der x-Wert um 1 erhöht. Bei positiven Steigungen größer als 1 wird der y-Wert um 1 erhöht. Negative Steigungen zwischen -1 und 0 erhöhen das x Wert um -1 und negative Steigungen um weniger als -1 erhöhen den y-Wert um -1.

Thrid, DDAs nutzen die Tatsache, dass wenndie Änderung in einer Richtung ist 1, die Änderung in der anderen Richtung ist eine Funktion der Steigung. Jetzt wird es viel schwieriger, in Allgemeinheiten zu erklären. Daher berücksichtige ich nur positive Steigungen zwischen 0 und 1. Um in diesem Fall das nächste zu plottende Pixel zu finden, wird x um 1 inkrementiert und die Änderung von y berechnet. Eine Möglichkeit, die Änderung von y zu berechnen, ist einfach add die Steigung zum vorherigen y und die Rundung zum ganzzahligen Wert Dies funktioniert nur, wenn Sie den y-Wert als reelle Zahl beibehalten. Neigungen, die größer als Eins sind, können y nur um 1 erhöhen und die Änderung in x berechnen.

Viertens optimieren einige DDAs den Algorithmus weiter, indem Gleitkommaberechnungen vermieden werden. Zum Beispiel ist der Linienalgorithmus von Bresenham ein DDA, der zur Verwendung einer Ganzzahlarithmetik optimiert ist.

In diesem Beispiel ist eine Linie von (2, 2) zu (8, 10),die Steigung beträgt 8/6, was größer als 1 ist. Das erste Pixel ist bei (2, 2). Das nächste Pixel wird berechnet, indem der y-Wert um 1 inkrementiert wird und die Änderung in x (die inverse Steigung von dx / dy = 6/8 = 0,75) zu x addiert wird. Der Wert von x wäre 2,75, der auf 3 gerundet wird, und (3, 3) ist aufgetragen. Das dritte Pixel würde y erneut inkrementieren und dann die Änderung in x zu x hinzufügen (2,75 + 0,75 = 3,5). Das Runden würde das dritte Pixel bei (4, 4) darstellen. Das vierte Pixel würde dann plotten (5, 4), da y um 1 inkrementiert würde, aber x würde um 0,75 inkrementiert werden und gleich 4,25.

Können Sie in diesem Beispiel das Problem mit Ihrem Code sehen?