Autor |
Beitrag |
roKR-91
      
Beiträge: 22
|
Verfasst: Do 25.02.10 09:47
hi...für meine facharbeit in info (thema: bresenham) will ich eine linie mit dem bresenham algorithmus zeichnen. bei wikipedia hab ich den bresenham-algo für eine linie gefunden, allerdings in C also hab ich den algo mal in delphi umgeschrieben. fehlermeldungen kommen keine, aber die linie wird auch nicht auf dem formular gezeichnet.
hier mein quelltext:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure p_brese (xa, xe, ya, ye : integer); var x, y, dx, dy : integer; fehler : real; begin dx := xe - xa; dy := ye - ya;
x := xa; y := ya;
fehler := dx/2; form1.image1.Canvas.Pixels[x,y]:= clred; form1.Image2.Canvas.Pixels[x,y]:= clred;
while x < xe do begin x := x+1; fehler := fehler - dy; if fehler < 0 then begin y := y + 1; fehler := fehler + dx; form1.image1.Canvas.Pixels[x,y]:= clred; form1.Image2.Canvas.Pixels[x,y]:= clred; end; end; end; |
und der aufruf dazu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin with form1.Image1.Canvas do begin p_brese(75,320,535,75); end; end; |
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 25.02.10 11:04
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
roKR-91 
      
Beiträge: 22
|
Verfasst: Fr 12.03.10 00:07
weiß gar nich mehr wo ich diesen schwachsinnigen algorithmus her hab...hab jetz nochmal in hefter geschaut und bresenham müsste also so aussehen...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure p_brese (xa, xe, ya, ye : integer); var x, y, d, dx, dy, E, NE : integer; begin dx := xe-xa; dy := ye-ya;
d := 2*dy-dx; E := 2*dy; NE := 2+(dy-dx);
x := xa; y := ya;
repeat begin if d<= 0 then begin d := d + E; x := x + 1; end else begin d := d + NE; x := x + 1; y := y + 1; end; end; until x < xe;
end; |
die frage is jetz wo ich
Delphi-Quelltext 1:
| form1.image1.Canvas.FloodFill(x, y,clnavy,fsborder); |
einfüge damit der das zeichnet...hat jemand ne schnelle antwort ?
weiterhin wär es schön wenn mir jmd was zu antialiasing für eben diese linie sagen könnte (nicht mit opengl...ich soll das mit delphi machen)
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Fr 12.03.10 20:30
Kurz zum Bresenham:
Der 1. Code arbeitet mit nem Real (gleitkommawert).
Der Bresenham-Alg ist deshalb so schnell (und bekannt) weil nur Integer Operationen verwendet werden.
Zum 2. Code:
Du solltest die Variablen so bennennen, dass man damit was anfangen kann.
Ich z.B. kenn den Bresenham immer mit einer Fehlervariablen (wie Code 1).
Von daher solltest du Code(1) anpassen: glaub es sollte so gehen: (fehler := dx div 2 mit fehler: Integer).
Außerdem solltest du die globalen Variablen om code trennen (d.h. nicht auf form1 zugreifen) sondern z.b. als zusätzlichen Parameter den Canvas angeben.
Zu Antialiasing und Bresenham siehe
web.cs.wpi.edu/~matt...liasing/methods.html
"Bresenham's algorithm was developed by Pitteway and Watkinson"
bzw. hier:
www.inf.tu-dresden.d...antialias_script.pdf
und bei wiki findest die beiden codes von dir auch nochmal:
de.wikipedia.org/wik...resenham-Algorithmus
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
|
|
|