Alapvető raszteres algoritmusok, szakasz rajzolása, DDA, MidPoint algoritmus
Alapvető raszteres algoritmusok A raszter egyenlő távolságban lévő pontokból álló mező. Egy raszter terület pontjait kétdimenziós tömb elemeiként címezhetjük. Az alapvető raszteres algoritmusok közé tartozik a poligonvonal megadása is. Ezt a Delphi-ben kétféleképpen tehetjük meg: Két dimenziós tömbbel: Var Poly: Array [1..N,1..2] of Integer; Rekord szerkezettel: Type PointType Record x,y : Integer; End; Var Poly : Array [1..N] of PointType;
A képernyő koordinátái A képernyő koordinátáinak megadásakor a derékszögű koordináta-rendszert vesszük figyelembe, azonban a (0,0) pont nem a bal alsó, hanem a bal felső sarokban található. A itt ismertetett raszteres algoritmusok a bal alsó kezdőpontot használják. Ezért egy ponttransz- formációval áttérhetünk az ábrán bemutatott, egyébként a monitorok kezelésének szokásos rendszerére. Erre használatos a Transf eljárás.
Szakasz rajzolásának kritériumai A szakasznak “egyenes vonalnak” kell látszania Pontosnak kell lennie Fedettsége legyen állandó függetlenül a vonal hosszától és hajlásszögétől Gyors legyen
Egyszerű növekményes módszer Az egyenes y=mx/b alakú egyenletét használjuk kiindulási alapul. Így megkapjuk az egyenes y tengelypontját (0,b). Majd meghatározzuk az m=dy/dx képlet segítségével, hogy mennyit lépjünk balra és mennyit felfelé az, hogy megkaphassuk az egyenes következő pontját. Így egy növekményes algoritmust kaptunk. Nem ad szép képet, mert nekünk kell kerekítenünk a kapott (x,y) értékeket, mert az ideális egyenes helyett csak közelítő raszter pontokat kaphatunk.
DDA algoritmus Az előbbi módszer hiányosságain segít Neve a digitális differenciál-analizátor szavak kezdőbetűiből ered. A dx-et és dy-t kedvezőbben választja meg. A nagyobb elmozdulás irányában legyen a növekmény egy, tehát Max(dx,dy) 1.
MidPoint algoritmus Kiindulási alap az egyenes egyenlete (y=mx/b) Adott a megrajzolandó szakasz, és a kezdő és végpontja Készítenünk kell egy Line(x1,y1,x2,y2) eljárást. Legyen dx: x2 x1 és dy: y2 y1. Ekkor m=dy/dx. Tegyük fel, hogy az egyenes meredekségére a következő: 0< =m< =1 tehát az egyenesnek a vízszintes tengellyel bezárt szöge 0 és 45 közé esik, ugyanis m=tg(α). Ebből az következik, hogy az x tengely irányú elmozdulás nagyobb mint az y tengelyű elmozdulás. A növekményes algoritmus az x érték eggyel való növelésekor kiszámolja, hogy mennyivel kell változtatni az y koordinátát. Az egyenes ideális nyomvonala valahol a két y koordináta között halad. Az a feladatunk, hogy a két lehetséges y koordináta közül azt válasszuk ki, amelyiknek az ideális egyenestől mért eltérése a kisebb.
Az algoritmust most már csak fel kell oldanunk a kezdeti megszorítások alól. Ugyanis az egyenesnek a vízszintes tengellyel bezárt szöge 0 és 45 közé esik. Ebből az is következik, hogy az x tengely irányú elmozdulás nagyobb, mint az y tengely irányába eső. Egyszerű kiegészítéssel az algoritmus teljessé tehető. A kiindulási feladat alapján valójában nyolc eset különböztethető meg, figyelembe véve a kezdő és végpontok viszonyát is. Néhány esetben a koordinátákat nem növelni kell eggyel, hanem csökkenteni. Ezért bevezetjük az sx és sy váltózókat, ezekben a növekményt tároljuk, értékük -1,0 és +1 lehet. Ha a meredekség nagyobb mint 1 akkor a dx és dy szerepe fölcserélődik.