Autor Thema: Geradengleichungen  (Gelesen 6077 mal)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« am: 28. March 2005, 10:56 »
hiho,

mein post hat äußerst wenig mit os-coding selber zu tun, denke ich, aber ich brauchs trotzdem für mein OS. ich versuche gerade eine Funktion zu schreiben, die mir eine strecke zeichnet. dazu habe ich mich der mathematik und deren gleichungen bedient. ich hab zuerst ne funktion geschrieben, die mir bei nem X-Wert und 2 koordinaten den Y-Wert gibt. die funktion ergibt sich aus der Formel f(x) = x*a. Aufgelöst mit den Koordinaten ergibt sich f(x) = x*((y2-y1)/(x2-x1)). Die funktion zum zeichnen ließt etz immer schön die werte aus, addiert die koordinaten und malt dann den punkt. 2 aussetzer hat die funktion.
1. wenn der Y-Abstand größer ist als der X-Abstand, die linie also nach unten verlaufen müsste (beispiel):

X
 X
 X
  X
   X
   X

wird nur das hier gezeigt:

X
 X

  X
   X


und wenn die koordinaten etwas ungleiches haben, also etwa so:
Y1=21h
Y2=20h
X1=40h
X2=41h
dann spinnt das ding und gibt nur den startpunkt aus.

deshalb wollte ich fragen, ob schonmal jemand eine solche gleichung implementiert hat, die dann auch geht, und wie er das gemacht hat (C oder ASM is wurscht, geht nur um die theorie!)

danke,
J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. March 2005, 11:31 »
Vielleicht hilft dir folgendes: http://brackeen.com/home/vga/shapes.html ist zwar für VGA sollte aber auch so klappen :D

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 29. March 2005, 13:48 »
danke, allerdings glaub ich das es da mit dem 2. problem auch nimmer geht... ich werds mal testen!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #3 am: 29. March 2005, 14:01 »
Da wäre für dich Bresenham-Algorythmus hilfreich, mein Linienzeichencode basiert auf dem (in Abwandlung) bin nur grade nicht an meinem Rechner also  kann den leider nicht zeigen grade. Jedenfalls werden bei mir die Linien korrekt gezeichnet, ohne das Pixel dazwischen fehlen.
Sind allerdings knapp 100 C-Zeilen, also recht umfangreich, aber dafür verdammt schnell (hab damit sogar teilweise 3D-Rendering in Bochs fast flüssig hinbekommen)
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

JensFZ

  • Beiträge: 96
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 29. March 2005, 15:02 »
Hiho

Das mit der länge dürfte ja nicht das problem sein:
Länge = a² + b²

a ist z.B. die Länge auf der X-Achse
b ist z.B. die Länge auf der Y-Achse
 

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 29. March 2005, 17:12 »
Bresenham wird bei meinem Link auch erwähnt.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 30. March 2005, 14:54 »
herzlichen dank für eure antworten. ich werde mir das zuhause (bin im urlaub) mal genauer anschauen (internet kostet hier im tourismusbüro zwar nur 1 €/std, hab aber meinen rechner net ;)) und dann wird das schon gehen. ich hab mir auch noch überlegt, dass man doch ausrechnen könnte (anhand der verschiebung der X- und Y-Koordinaten des 2. Punktes vom ersten, alle wie viele punkte man eine verschiebung machen müsste, und in welche richtung, und ob die linie nach oben oder unten geht, und dadurch dann eine funktion bauen, die im grafikspeicher mit offsets arbeitet. das müsste noch schneller sein, oder?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen