![]() |
Linien plotten mit Bresenham
Der Bresenham Algorithmus eignet sich um Linien von einem Punkt zum nächsten zu berechnen und dabei zu überprüfen, welche Punkte gezeichnet werden müssen. Da nicht jeder Punkt auf die genauen Koordinaten gezeichnet werden kann muss man entweder die exakte Formel benutzen und jedes mal runden oder eben den Algorithmus von Bresenham verwenden. Dieser kommt mit Additionen (und einer Multiplikation mit 2) und Integern aus und betrachtet jeden Punkt auf der Linie nur ein mal und ist deswegen sehr effektiv.
Das folgende Beispiel habe ich mit diesem ![]()
Delphi-Quellcode:
[edit=Matze] Mfg, Matze[/edit]
procedure Bresenham(P1, P2: TPoint);
procedure TauschePunkte(var P1: TPoint; var P2: TPoint); var Temp: TPoint; begin Temp := P1; P1 := P2; P2 := Temp; end; var x, y, e, dx, dy: Integer; begin if P1.X > P2.X then TauschePunkte(P1,P2); e := 0; // Der relative Fehler (im Tutorial e' genannt) x := P1.X; y := P1.Y; dx := P2.X - P1.X; dy := P2.Y - P1.Y; if dy >= 0 then // positive Steigung if dx >= dy then // leichte positive Steigung for x := P1.X to P2.X do begin Plot(x,y); if 2*(e + dy) < dx then Inc(e,dy) else begin Inc(y); Inc(e, dy-dx); end; end else // starke positive Steigung for y := P1.Y to P2.Y do begin Plot(x,y); if 2*(e + dx) < dy then Inc(e,dx) else begin Inc(x); Inc(e, dx-dy); end; end else // negative Steigung if dx >= -dy then // leichte negative Steigung for x := P1.X to P2.X do begin Plot(x,y); if 2*(e + dy) > -dx then Inc(e,dy) else begin Dec(y); Inc(e, dy+dx); end; end else // starke negative Steigung begin TauschePunkte(P1,P2); x := P1.X; dx := P2.X - P1.X; dy := P2.Y - P1.Y; for y := P1.Y to P2.Y do begin Plot(x,y); if 2*(e + dx) > -dy then Inc(e,dx) else begin Dec(x); Inc(e, dx+dy); end; end end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz