Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Reflection-Refraction Simulator

  Alt 6. Feb 2005, 23:41
Zitat von Khabarakh:
PPPS: ( )
Zitat von gmarts:
- Freihandobjekte bzw. Beziersplines fehlen noch. Stupid
Das Anzeigen der Beziérs wäre ja kein großes Problem , jetzt brauche ich nur noch die Formel für den Schnittpunkt mit einer Geraden+eine Orthogonale im Schnittpunkt .
Ist ja nen Dingen... Du hast mich mit diesem netten Progrämmchen seit langem mal wieder auf eine nette Programmier-Aufgabe gebracht: Brechung/Reflexion an Splines
Den Spline-Editor hab ich schon, nur mit den Emittern steh ich noch auf Kriegsfuß. Es gibt ja grundsätzlich 2 Möglichkeiten die "Kollision" zu erkennen. 1) Den Strahl Stück für Stück aufbauen, und dann, wenn nahe genug an einem Objekt agieren. 2) Arithmetisch, also brav die Schnittpunkte berechnen, und den naheliegensten verarbeiten.
So, Nr. 2 ist eindeutig schöner und genauer und performanter und überhaupt... Also wollte ich das so machen. Nun besteht ein Strahl, da ja mehrfach gebrochen/reflektiert aus mehreren einzelnen Stücken, also ein Array/List von Linien. Für einen Strahl ja noch okay, aber ich wollte dann auch Emitter haben, die beliebig viele Strahlen in einem wählbaren Öffnungswinkel in eine wählbare Richtung schießen. Eieiei, das ist dann schon schwerer nachzuvollziehen. Dazu kommt, dass ich beliebig viele Objekte in der Szene habe, und ich wollte diese auch unterschiedlichen Typs haben (Kreis, Linie, Spline, ...)
Da ich bisher immer nachts dran war, fehlt mir da noch die nötige Gedankenordnung zu

Aber das Problem mit den (Beziér-)Splines ist, dass diese eine Gleichung 3. Grades darstellen. Schneidet man das mit einer Linie, so bekommt man ein Gleichungssystem das zu lösen ist. Zwar eindeutig bestimmt, aber leider muss man am Ende die Nullstellen einer Gleichung 3. Grades berechnen, um letztendlich die Schnittpunkte zu erhalten. Das übliche Verfahren (eine NS raten, dann Polynomdivision und pq-Formel/Mitternachtsregel) ist numerisch im PC wenn überhaupt nur sehr aufwändig und wenig performant lösbar. Also ist klein Dizzy auf die Suche gegangen, und hat die Cardano'schen Formeln entdeckt, die es erlauben die NS von Gleichungen 3. bzw. 4. Grades implizit zu errechnen.

Das implementiert, und auf das nächste doofe Problem gestoßen: Man braucht ja die Normale im Schnittpunkt. Brauchbar annähern kann man das ja, in dem man zwei um den Schnittpunkt herum liegende Punkte auf dem Spline verbindet (Tangente), und diese um 90° dreht. Das dumme ist nur: Man kann nicht direkt bestimmen in welche Richtung die Normale zeigt. Naja, und eben das macht ja nachher den unterschied Relexion<->Refraktion aus... Also muss ich mir jetzt irgendwie überlegen, ob ich herausfinden kann, ob die Normale gewendet werden muss...
Bisher hat das Teil >700 Zeilen Code, und es wird noch überhaupt nichts gebrochen/gespiegelt. Also so eben Splines einbauen ist wohl leider nicht ^^

Wie hast du das denn mit den Strahlen gemacht? Schrittweise (subpixelweise) aufgebaut, oder eine Liste von Linien?
Sehr interessantes Thema das ganze , und ist eigentlich auch eine nette Vorstufe zum sogenannten Photontracing das gute 3D-Renderer beherrschen. Aber Polygondaten sind da nochmal ein anderes Kaliber .
Ich bin hot

Danke für die Anregung und Erwähnung (), und glückwunsch zu dem netten Progrämmchen!

Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat