View Full Version : Bsp 4: Active List
DancingComet
27-11-2002, 14:47
bitte um hilfe:
frage 1:
so wie die active list im buch beschrieben ist, ist das doch ein array von lauter edgelists, also was zweidimensionales. wir haben aber nur unsere klasse edgelist. kann man aus der arrays basteln? oder wie sollen wir das sonst machen?
frage 2:
im build active list müssen wir alle scan-linien durchgehen und zur jeweiligen scanlinie alle sie schneidenden edges dazugeben. wir haben aber pro edge nur den oberen y-wert gespeichert. wie merkt man dann, ab welchem y-wert eine scanlinie eine edge schneidet? es ist ja kein unterer y-wert abgespeichert...
danke im voraus ;)
Buch Seite 123...
active sollte glaub ich nur eine normale "CG1Edgelist" sein (is ja im algorithmus im buch auch kein array...), in die die aktuellen edges eingeschrieben werden, also wird immer die nächste, die laut [scan] aktiv ist, solange es noch eine gibt, die aktiv werden kann. fillScan berechnet dann die schnittpunkte und füllt dann den "inneren" bereich zwischen ihnen.
Quote from Buch:
"The following procedure performs a solid-fill scan conversion for an input set of polygon vertices. For each scan lnie within the vertical extents of the polygon, an active edge list is set up and edge intersections are calculated. Across each scan line, the interior fill is then applied between successive pairs of edge intersections, processed from left to right."
also ich hab den algorithmus ausm buch umgelegt, und das wars mehr oder weniger.
hoff ich verzapf da jetzt keinen blödsinn...
@ nexxyz
funkt bei dir jetzt schon alles?
lg
schaut gut aus. bissi spieln werd ich mich aber schon noch.
hast du alle methoden aus dem Buch (von S.122-124) implementiert? In der Klasse CG1ScanFilledPolygon sind ja nur folgende Methoden zu bearbeiten, oder?
- buildCG1EdgeList()
- buildActiveList()
- fillScan(CG1NewCanvas canvas)
- drawClipped(CG1NewCanvas canvas)
was ist mit der Methode makeEdgeRec und scanFill vom Buch?
die Methoden deleteAfter, updateActiveList und resortActiveList sind ja in der CG1EdgeList?
danke
lg
MarvinTheRobot
29-11-2002, 12:41
Hm also scanfill fehlt ma auch und deswegen bin ich auch a bissal verwirrt....
Irgendwie wirds aber schon gehn, vielleicht mit noch a bissal mehr hilfe aus dem forum hier. *liebschau*
mfg, Phil
ich komm mit dem active nicht ganz klar, ist das eine CG1Edge, oder eine CG1EdgeList ?
DancingComet
01-12-2002, 17:20
active ist ne edgelist
leobasil
01-12-2002, 18:05
wenn active ne edgelist is, wie übersetz ich dann
active->next = NULL;
im scanFill ca. mitte ?
weil einfach active.next kann ich ja nicht schreiben, .next gibts ja nicht in den edgelisten... ich mein ich hab jetz mal
active.head.next aber passt das ?
DancingComet
01-12-2002, 18:55
in c dürfte es kein head geben, und da spricht man das erste listenelement auch mit next an... in unserem fall müssten wir also schreiben: active.head = null;
das wird aber beim erzeugen einer edgelist sowieso gemacht, und deswegen brauchst du das eigentlich überhaupt nicht (du kannst also auch gar nichts hinschreiben)
das brauchst du auch nicht, damit initialisierst du in C den Anfangswert von Active, in unserer java-Version passiert das schon durch den Konstruktor. Also sobald du
CG1EdgeList active = new CG1EdgeList();
geschrieben hast, sollte active.next schon NULL sein.
(CG1EdgeList: Zeile 7)
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.