Autor |
Beitrag |
hui1991
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Sa 08.12.07 23:54
Hi,
da mir Google und das Forum nichts über das Zeichnenverfahren von Linien am PC verraten wollte, frage ich euch.
Ich habe ein Gitternetz. 800x600 Pixel. Ich habe ein Startpunkt und ein Endpunkt.
Wie zeichne ich eine Linie?
Quelltext 1: 2: 3: 4: 5:
| OOOOXXX0OOOOOOOOOOOOOOOOOOOOOOOOO OOOOO00XXXX0OOOOOOOOOOOOOOOOOOOOO 00000000000XXXX0OOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOXXXX0OOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOXXXXXOOOOOOOOO |
Ich brauch das eigentlich nur zum verstehen, wie das die LineTo eigentlich so macht ^^
MfG
hui1991
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Sa 08.12.07 23:56
Delphi-Quelltext 1: 2: 3: 4:
| begin image1.canvas.moveto(X,Y) image1.canvas.lineto(X1,Y1)end; |
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: So 09.12.07 00:00
Kannst du mir auch erklären wie LineTo das anstellt?
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: So 09.12.07 00:03
Wie wie das LineTo das anstellt? ich meine es färbt alle Pixel Linear bis zum Zielpunkt schwarz oder was meinst du ??? 
|
|
>M@steR<
      
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: So 09.12.07 00:07
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:02, insgesamt 2-mal bearbeitet
|
|
>M@steR<
      
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: So 09.12.07 00:09
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:02, insgesamt 1-mal bearbeitet
|
|
TGLDX
      
Beiträge: 22
|
Verfasst: So 09.12.07 00:15
Schau dir mal den Bresenham-Algorithmus an.
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: So 09.12.07 11:41
Danke für die Antworten,
der Bresenham-Algorithmus war genau das was ich gesucht habe. Ich hab den C-Code einfach in Delphi geschrieben und dann war das ding schon fertig =)
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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure TMap.line(xstart,ystart,xend,yend: Integer); var x, y, t, dx, dy, incx, incy, pdx, pdy, ddx, ddy, es, el, err: Integer; begin dx:= xend - xstart; dy:= yend - ystart;
incx := sign(dx); incy := sign(dy); if dx<0 then dx := -dx; if dy<0 then dy := -dy;
if dx>dy then begin pdx:=incx; pdy:=0; ddx:=incx; ddy:=incy; es :=dy; el :=dy; end else begin pdx:=0; pdy:=incy; ddx:=incx; ddy:=incy; es :=dx; el :=dy; end;
x := xstart; y := ystart; err:= el div 2; SetPixel(x,y);
For t:=0 to el do begin err := err-es; if err<0 then begin err := err+el; x := ddx+x; y := ddy+y; end else begin x := pdx + x; y := pdy + y; end; SetPixel(x,y); end; end; |
Funktioniert bei mir ganz schön schnell ^^
MfG
hui1991
|
|
OlafSt
      
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Mo 10.12.07 11:55
Bresenham gehört nicht umsonst zu den schnellsten Line-Algo's, die es so gibt.
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Mo 10.12.07 15:30
hui1991 hat folgendes geschrieben: | Danke für die Antworten,
der Bresenham-Algorithmus war genau das was ich gesucht habe. Ich hab den C-Code einfach in Delphi geschrieben und dann war das ding schon fertig =)
....
MfG
hui1991 |
Hallo,
dass du den nicht gefunden hast (Grundlage der Grundlage der Grundlage der Computergrafik) heisst aber, dass du gugeln noch ein wenig üben musst.
Gruss Reinhard
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Sa 15.12.07 15:14
Hi,
ehrlich gesagt hab ich während meines suchens Bresenham zwar gelesen, aber net verstanden das es zu meinem Problem passt.
Mit Texten komme ich meist eh nie zurecht. ^^
Naja okay.
MfG
hui1991
|
|