|
![]() |
Hallo DPler,
Nachdem ich dieses Forum nun länger verfolgt habe, will ich doch auch mal aktiv werden ![]() Reflection-Refraction Simulator ![]() Was soll ich sagen, mit diesem Programm können eben dem Namen gemäß Spiegelungen und Streuungen an verschiedenen Spiegeltypen simuliert werden ![]() Zum Zeichnen habe ich die GR32-Komponenten benutzt (Danke an dizzy, sonst hätte ich das nie entdeckt ![]() Objekte werden allgemein mit der rechten Maustaste angewählt und mit der linken Maustaste an eine neue Position gesetzt. Zusätzlich gibt es objektspezifische Einstellungen am rechten Rand, die meistens selbsterklärend sein sollten, näheres unten. Neue Objekte werden durch den entsprechenden Button oben angewählt und dann mit Linksklick gesetzt. Gelöscht werden sie mit [Entf] (mir ist erst gerade eingefallen, dass das vielleicht für Verwirrung sorgen könnte, wenn man rechts ein Eintrag löschen will ![]() ![]() Rechts unten befinden sich noch drei allgemeine Optionen: - Anti-Aliased: GR32 sei Dank ![]() - Winkelangaben: Winkel jedes Strahls werden angezeigt - Linsen: Brechungsmodus, s.u. Der (Licht-)Strahl Breitet sich geradlinig aus ( ![]() - Winkel: Startwinkel des ersten Strahls Der Hohlspiegel ![]() Physikalischer Hintergrund: Alle vor der Brechung parallelen Strahlen schneiden sich im Brennpunkt. Naja, jedenfalls fast ![]() - Radius: Halber Durchmesser in Pixeln ( ![]() - Startwinkel: Wo er eben anfängt ^^ - Weite: Länge des Kreisbogens Der ebene Spiegel ![]() Physikalischer Hintergrund: Einfallswinke=Ausfallswinkel ![]() Und hier sollte noch der Paraboloid stehen ![]() ![]() Hehe, fast vergessen: Der Brechungsmodus ![]() BETA, folgt nach einem sehr einfachen Gesetz: Am Anfang befindet sich der Strahl in der Luft, bei der ersten Spiegel-"Durchquerung" wechselt er das Medium (und zwar gerade nach Glas mit einem Brechungsindex n=1,52), beim nächsten wieder in Luft. (Hier also ein Glas-Prisma) ToDo: - werde wohl noch "Echtzeitverschiebung" von Objekten (mit gleichzeitiger Brechnung) einbauen - Brechungsindex frei wählbar - Paraboloid ![]() - Höchstspieglungszahl frei wählbar ![]() ![]() PS: ![]() Download s.u.! (oder lieber andersherum?)
Moderator in der EE
|
|
#11
@ Torpedo: öhm... hups
![]() @ Dizzy: Das wird interesant mit dem Wissen der 9. Klasse ![]() ![]() ![]() 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 Stupid ![]() ![]() ![]() 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... ![]() ![]() ![]() ![]() ![]() ![]() ![]() Wie hast du das denn mit den Strahlen gemacht? Schrittweise (subpixelweise) aufgebaut, oder eine Liste von Linien?
![]() PS: Dass sich noch niemand darüber beschwert hat, dass die Winkel mathematisch falschherum angezeigt werden, spricht dafür, dass hier alle so gut wie nur Delphi im Kopf haben ![]()
Sebastian
|
![]() |
Delphi 7 Enterprise |
#12
![]() Das wird interesant mit dem Wissen der 9. Klasse
![]() ![]() ![]() ![]() Hab natürlich auch Nr. 2 genommen
![]() ![]() ![]() ![]() Ok, stopp
![]() ![]() ![]() ![]() ![]() ![]() (Ist ja das lustige: So sehr genau hab ich mich mit der Physik noch nicht auseinandergesetzt - bisher hab ich erstmal den Rahmen erstellt ![]() ![]() Ein Array (ja, ich weiß, eine Liste wäre besser gewesen
![]() Ich sollte mich echt mal tagsüber dran setzen, und vielleicht mal nen Plan machen... ![]()
Fabian K.
|
![]() |
|
#13
![]() ![]() Ok, stopp
![]() ![]() ![]() ![]() ![]() ![]() (Ist ja das lustige: So sehr genau hab ich mich mit der Physik noch nicht auseinandergesetzt - bisher hab ich erstmal den Rahmen erstellt ![]() ![]() ![]() ![]() ![]() Ein Array (ja, ich weiß, eine Liste wäre besser gewesen
![]() ![]() ![]() ![]()
Sebastian
|
![]() |
Delphi 7 Enterprise |
#14
![]() Also imo gibts da keinen Unterschied
![]() ![]() ![]() ![]() ![]() Öhm...äh...
![]() ![]() ![]() ![]() Gudde Nacht, Fabian
Fabian K.
|
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |