# raytracing 2d



## Nardian (12. Mai 2010)

hi

ich stehe grad vor folgendem problem.

ich habe eine fläche, die man am ehersten mit einem schachbrett vergleichen kann (die farben sind irrelevant). ich will nun eine linie zeichnen, die theoretisch beliebig dick sein kann (als grenze kann man davon ausgehn, dass die linie nie dicker sein wird, als eine feld-größe (egal in welche richtung)). 
mein erstes problem besteht nur darin, eine liste von betroffenen feldern zu erhalten. unter betroffen verstehe ich, dass sie "bezeichnet" werden soll, allerdings egal von der "hauptlinie" oder nur einer weiteren linie die quasi die stärke (breite) der linie darstellen soll.

leider kann ich keine Graphics.drawline oder sowas verwenden, ich muss die besagten felder wirklich selber rausfinden, da die feld-größe auch variieren kann.

hat jemand vielleicht eine idee / anreiz? oder kann mir sagen wie das thema heißt, dass ich danach googlen könnte? (meine bisherigen google-versuche haben leider zu keinem ergebnis gebracht, sonst wäre ich nicht hier  )

MfG


----------



## Steev (12. Mai 2010)

Ich hoffe du ärgerst dich nicht wenn ich sage, dass ich nicht ganz verstehe was du eigendlich willst...

Wenn du mithilfe eines "Strahls" überprüfen willst, welche Flächen durch diesen Strahl getroffen werden dann würde ich mithilfe von Linearem Algebra eine Gradengleichung aufstellen bei der ich die Schnittpunkte mit den Flächen (Polygonen) ermittle. Das ist jedenfalls die Schnellste Möglichkeit für "Raytracing".

Vieleicht kannst du ja mal kurz skizieren was du eigendlich machen willst, dann kann man am besten helfen.

Gruß
Steev


----------



## Marco13 (12. Mai 2010)

Klingt erstmal so, als wäre die Feldgröße egal, sondern als würde nur das Verhältnis zwischen Feldgröße und Liniendicke entscheidend sein. Wenn man in ein Raster von Feldern der Größe 1x1 eine Linie der Dicke 1 malt, betrifft das ggf. die gleichen Felder, wie wenn man in ein Raster mit Feldern der Größe 10x10 eine Linie der Dicke 10 malt... (soll rauslaufen auf: Mal' die Linie mit g.drawLine in ein BufferedImage, und skalier' das dann hoch, so dass es passt  )


----------



## OliverKroll (12. Mai 2010)

Du suchst bestimmt nach dem Bresenham-Algorithmus ? Wikipedia .


----------



## Nardian (12. Mai 2010)

@Marco13, wie schon gesagt, kann ich leider keine Graphics verwenden (ist für meine zwecke leider zu langsam, und ich muss tatsächlich die betroffenen felder ermitteln)

@OliverKroll, nein, den kenne ich bereits, aber der entscheidet sich für einen pixel (also nächster pixel gleichbleiben oder 1 pixel weiter oben), ich bräuchte aber beide, oder sogar alle 3, wenns genau bei einer ecke verläft, sodass ganze 3 felder betroffen sind.

@Steev, klingt ansich recht vernünftig.. ich werd mal schaun ob ich vllt noch ne skizze machen kann, aber ansich könnte das mein problem tatsächlich lösen...

thx an alle


----------



## OliverKroll (12. Mai 2010)

Es gibt mehrere Varianten des Bresenham-Verfahrens: bei Wikipedia ganz unten: Weblinks führt auf Bresenham modified algorithm - ALL the points


----------



## Nardian (12. Mai 2010)

vielen dank erstmal.

ich bin mir zwar noch nich so ganz sicher, ob es wirklich passt, weil mich verwunderts etwas, dass ich nicht wirklich die stärke meiner linie irgendwie einfliesen lassen kann, in den algo. aber vielleicht hab ich ja auch glück, und meine eingrenzung, dass die linie eben nicht sooo dick sein kann, behebt dieses problem... mal sehn...

thx auf jeden fall


----------

