Ray-Tracing, Source Code

  • Hallo Karl-Heinz,
    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: KHS</i>
    <br />
    Hier mal eine sehr flexible Alternative zu Stand-Alone Programmen:
    ich hab mir vor längerem einen Raytracer auf Excelbasis gebastelt.
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    das hört sich tatsächlich sehr flexibel und übersichtlich an. Für einen Einstieg ins raytracing ist das sicher sehr empfehlenswert. Wenn du das in deine homepage gestellt hast, teste ich das bestimmt mal aus.
    Zur Mathematik: Vielen Dank für das posten der Formeln, besonders für die Brechung, die ja für eine allgemeine Lösung noch fehlte. Um Verwirrung bei den Pascal- und Delphi-Programmierern zu vermeiden, möchte ich erwähnen, dass das 'sqr' hier die Quadratwurzel bedeutet. In Pascal u.ä. heißt das sqrt, sqr bedeutet Quadrat. Eine weitere Anmerkung: In der ATM-Gemeinde ist die Conic Constant (CC) bzw. Schwarzschildkonstante SC gängiger als die Exzentrizität e. Der Zusammenhang ist SC=-e^2.


    Gruß
    Hans-Jürgen


    PS: Übrigens finde ich es faszinierend, dass in der Formel für die Brechung keine Winkelfunktionen auftauchen, obgleich das Brechungsgesetz ja die Sinus von Einfalls- und Ausfallswinkel benötigt. Bei der Herleitung der Beziehung glaubte ich einen Fehler gemacht zu haben, so unfassbar war das damals für mich. Zumindest mit den damaligen Rechnern war die Wurzelfunktion wesentlich schneller als die Sinusfunktion, mit dem Ergebnis, dass die Durchrechnung eines windschiefen Strahls deutlich schneller als die eines Meridionalstrahls mit herkömmlichem Formelsatz war.

  • Hallo Optikfreaks,


    wie versprochen habe ich mal meine alten Herleitungen hervorgekramt, etwas überarbeitet und auf meine Homepage gestellt [:)].
    Dort wird mit Hilfe von 'ein bisschen Vektorrechnung' [:D] die Reflektion und Brechung für beliebig windschiefe Strahlen an Kegelschnittflächen (Sphäre, Ellipsoid, Paraboloid, Hyperboloid) von Grund auf hergeleitet. Das ist weit weniger kompliziert, als mancher vielleicht zunächst denkt - und auf jedenfall verständlicher als fröhliches Formelraten aus einer bunten undokumentierten Formelsammlung [:)].


    Das angesprochene Excelsheet mit Makro-Funktionen zum Raytracing kann ebenfalls von dort heruntergeladen werden - zusammen mit kommentiertem Sourcecode in VBA6.0.


    Da Michael eigentlich nach nicht-rotationssymmetrischen Flächen gefragt hatte, habe ich als "kleine Fingerübung" [xx(] die Raytracing-Formeln für Kegelschnittflächen mit überlagerten Zernikefunktionen erweitert (mit heißer Nadel nebenher gestrickt, deshalb zur Sicherheit bitte auf Fehler prüfen [;)]...).


    Für ganz spezielle Fälle gibt's auch noch ein paar Tips für zur optischen Achse verkippte Elemente...
    Falls ich noch Fehler finde (da sind garantiert noch welche versteckt [}:)]), kommen sicherlich im Lauf der Zeit noch ein paar Korrekturen und Ergänzungen dazu.


    Fröhliches Nachrechnen und Grüße
    Karl-Heinz

  • Hallo Karl-Heinz,


    super Formelableitungen, vielen Dank für deine Mühe! Auch das Excelsheet finde ich sehr gelungen, schon erstaunlich, was man man mit Excel alles machen kann. Fehler habe ich noch keine gefunden, nur eine kleine Ungenauigkeit in dem Basic Sourcecode: Die Konstante Pi hast du als 3.1459... definiert, da fehlt eine 1, richtig ist 3.14159...
    Wie groß die Auswirkungen auf die Ergebnisse sind, habe ich nicht untersucht.


    Gruß
    Hans-Jürgen

  • Hallo zusammen,


    das mit 3.14592... hat schon seine Richtigkeit, damit wird die relativistische Raumkrümmung durch die schweren Gläser berücksichtigt [:o)][:o)][:o)]...


    Nein, im Ernst, ich hab's im Zip-File schon korrigiert [:I].
    Ist schon etwas doof, dass in VBA kein pi existiert. Ich hatte vorher wie immer pi = 4*atn(1) drin, habe es aber "aus didaktischen Gründen" auf die Schnelle noch durch eine Konstante ersetzt. Aus Faulheit vom Taschenrechner abgeschrieben...[:(!]


    Freut mich, wenn meine Herleitung für den einen oder anderen hilfreich ist [:)]!


    Grüß
    Karl-Heinz

  • Hallo nochmal,


    ein kleines ungelöstes Problem habe ich noch. Wie simuliert man eine vertikale Temperatur-Schichtung die im Strahlengang liegt?
    Klar ist:
    -- Es gibt einen Zusammenhang zwischen Lufttemperatur und Brechungsindex.
    -- Ein Temperaturgradient entlang der Z-Achse wäre einfach zu simulieren, indem man das Luftvolumen aus vielen dünnen Scheiben mit jeweils konstanter Temperatur zusammensetzt.
    -- Der Lichtweg wird im Allgemeinen keine Gerade mehr sein.


    Aber bei der vertikalen Schichtung wird's komplizierter.
    Je nach dem Vorzeichen der Y-Richtungs-Komponente des Strahls werden die Schichten in unterschiedlicher Reihenfolge durchlaufen. Und wenn sich der Strahl horizontal ausbreitet, dann wird er von der Schichtung gar nicht beeinflusst.


    Hat jemand eine Idee wie man das möglichst einfach berechnen kann?
    Vielleicht kann man das sogar analytisch lösen?


    Als Vereinfachungen schlage ich vor:
    -- Der geschichtete Bereich habe plane Ein- und Austrittsflächen (z = konstant).
    -- Der vertikale Brechzahl-Gradient sei im gesamten betrachteten Volumen konstant.


    Gruss
    Michael

  • Hallo Michael,
    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />Und wenn sich der Strahl horizontal ausbreitet, dann wird er von der Schichtung gar nicht beeinflusst.
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    ich glaube, das ist nicht richtig, weil die einfache Strahloptik in diesem Fall versagt. Du kannst ja nach dem Huyghens-Fresnelschen Prinzip jeden von einer Wellenfront angeregten Raumpunkt als Ausgangspunkt einer sekundären Kugelwelle ansehen, die mit allen anderen sekundären Kugelwellen interferiert und so die weitere Wellenfront erzeugt. Dann ist klar, das auch eine ebene Wellenfront mit horizontaler Richtung nicht horizontal bleibt, weil die Frontbereiche bei kleinerem Brechungsindex schneller fortschreiten als die Bereiche bei größerem Brechungsindex. Wenn ich das näherungsweise für kleine Strahlwinkel ausrechne, bekomme ich das Ergebnis, dass die Normalen der Wellenfront (die "Strahlen") einen Kreis beschreiben mit dem Radius n/(dn/dy), wenn y die vertikale Koordinate ist. Ein horizontal einfallender Strahl wird also näherungsweise kreisförmig abgelenkt in Richtung des größeren Brechungsindex, im Rahmen der Näherung gilt das auch für Strahlen mit kleiner positiver oder negativer y-Komponente. Wie sich windschiefe Strahlen oder Strahlen mit größerer Neigung verhalten, kann ich noch nicht überblicken, vielleicht hilft dir aber meine Anregung so weit, dass du die allgemeine Lösung findest. Übrigens ist das Problem ja identisch mit der Schallausbreitung über dem Erdboden bei Temperaturschichtung, da sollte es Lösungsalgorithmen geben.


    Viel Erfolg beim Herleiden[:D]


    Hans-Jürgen

  • Hallo Hans-Jürgen,


    &gt; ich glaube, das ist nicht richtig, weil die einfache Strahloptik in diesem Fall versagt. Du kannst ja nach dem Huyghens-Fresnelschen Prinzip jeden von einer Wellenfront angeregten Raumpunkt als Ausgangspunkt einer sekundären Kugelwelle ansehen...


    Ja, wenn ich mir's so richtig überlege dann könntest du Recht haben. Leider wird die Berechnung dadurch nicht einfacher :(


    Gruss
    Michael

  • Hallo Hans-Jürgen,


    &gt; ... bekomme ich das Ergebnis, dass die Normalen der Wellenfront (die "Strahlen") einen Kreis beschreiben mit dem Radius n/(dn/dy), wenn y die vertikale Koordinate ist. Ein horizontal einfallender Strahl wird also näherungsweise kreisförmig abgelenkt in Richtung des größeren Brechungsindex, im Rahmen der Näherung gilt das auch für Strahlen mit kleiner positiver oder negativer y-Komponente.



    Der Hintergrund meiner Frage war natürlich wie sich so ein Temperatur-Gradient auf die interferometrische Messung eines Spiegels auswirken würde. Zwischen Interferometer und Spiegel sind ein paar Meter Luftweg, und nehmen wir mal an dass dort überall ein gleichmässiger vertikaler Temperatur-Gradient ist. Dann müssten doch alle Strahlen gleichmässig nach oben (oder unten) gebogen werden.
    Ich kann mir noch nicht vorstellen wie dadurch Astigmatismus entstehen soll. Hat jemand eine Idee?


    Gruss
    Michael

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />
    ein kleines ungelöstes Problem habe ich noch. Wie simuliert man eine vertikale Temperatur-Schichtung die im Strahlengang liegt?
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    hallo!
    als physiker würde ich jetzt mal sagen, dass das wurscht ist. ausschlaggebend ist nämlich weniger die temperatur als die luftfeuchtigkeit. wenn Du es allerdings wirklich berücksichtigen willst, dann würde ich auch gleich die raumkrümmung durch gravitationsfelder in abhängigkeit von der lage der optik mitnehmen [:o)]
    lg
    birki

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />
    Hast du eine Quellenangabe aus welcher der Zusammenhang zwischen Luftfeuchtigkeit und Brechungsindex hervorgeht?
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    hallo!
    auf die schnelle kann ich nur zur grundlegenden lektüre bergmann-schäfer, lehrbuch der experimentalphysik, band 3, 9. auflage, s. 256 ff anbieten. die lichtgeschwindigkeit hängt von der permittivität des mediums ab, welche (hier habe ich zugegbenermassen spekuliert) im fall von luft primär von der luftfeuchtigkeit abhängen sollte.


    das war aber auch ein scherz von mir - der effekt sollte so gering sein, dass er für einen optischen raytracer keine rolle spielen sollte [;)]

  • Hallo,


    &gt; auf die schnelle kann ich nur zur grundlegenden lektüre bergmann-schäfer, lehrbuch der experimentalphysik, band 3, 9. auflage, s. 256 ff anbieten. die lichtgeschwindigkeit hängt von der permittivität des mediums ab, welche (hier habe ich zugegbenermassen spekuliert) im fall von luft primär von der luftfeuchtigkeit abhängen sollte.


    In meinen Büchern habe ich bislang nur den Zusammenhang zwischen Temperatur und Brechungsindex gefunden. Falls noch jemand was zur Luftfeuchtigkeit findet, immer her damit.



    &gt; das war aber auch ein scherz von mir - der effekt sollte so gering sein, dass er für einen optischen raytracer keine rolle spielen sollte [;)]


    Wenn das so wäre, dann gäbe es keine Probleme mit Tubus-Seeing bei geschlossenen Schmidt-Cassegrain Teleskopen. Die Temperaturschichtung ist hier eindeutig NICHT vernachlässigbar.


    Gruss
    Michael

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />
    Wenn das so wäre, dann gäbe es keine Probleme mit Tubus-Seeing bei geschlossenen Schmidt-Cassegrain Teleskopen. Die Temperaturschichtung ist hier eindeutig NICHT vernachlässigbar.
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    hi!
    das wäre dann aber auch lageabhängig, oder?
    lg
    birki

  • Hallo,


    &gt; das wäre dann aber auch lageabhängig, oder?


    Davon gehe ich aus.



    &gt; und auf die schnelle noch ein link zur permittivität und dem zusammenhang derselben mit der lichtgeschwindigkeit: ...


    Das ist schon klar dass die Lichtgeschwindigkeit von der Permittivität des Mediums abhängt.
    Letztlich ist es egal wie man die Sache betrachtet:
    a) Man kann sagen die Temperatur und Luftfeuchtigkeit beeinflussen die Permittivität, diese wiederum bestimmt die Lichtgeschwindigkeit im Medium, und daraus kann man wiederum auf den Brechungsindex zurück schliessen.
    b) Oder man verwendet gleich Näherungsformeln die beschreiben wie der Brechungsindex von Temperatur (oder Luftfeuchtigkeit) abhängt. Ich bevorzuge diese Methode, habe aber bislang nur Angaben über die Temperatur-Abhängigkeit gefunden. Und daraus habe ich geschlossen dass die Luftfeuchtigkeit kein wichtiger Einflussfaktor ist.


    &gt; PS: BITTE, BITTE, BITTE tu das jetzt nicht in Dein raytracerprojekt einfliessen lassen :)


    Wieso nicht? Wenn es eine Abhängigkeit gibt die sich in der Praxis bemerkbar macht (siehe SC Beispiel) dann muss das in die Software rein.


    Gruss
    Michael

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />


    b) Oder man verwendet gleich Näherungsformeln die beschreiben wie der Brechungsindex von Temperatur (oder Luftfeuchtigkeit) abhängt. Ich bevorzuge diese Methode, habe aber bislang nur Angaben über die Temperatur-Abhängigkeit gefunden. Und daraus habe ich geschlossen dass die Luftfeuchtigkeit kein wichtiger Einflussfaktor ist.


    Wieso nicht? Wenn es eine Abhängigkeit gibt die sich in der Praxis bemerkbar macht (siehe SC Beispiel) dann muss das in die Software rein.<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">


    hallo!
    anbei noch ein wikipedia - link - http://de.wikipedia.org/wiki/Brechzahl


    weshalb ich bezweifle, dass die inbetrachtnahme von brechzahländerungen der luft durch temperatur und luftfeuchtigkeit sinnvoll ist, liegt in der grösse des effekts - n Luft ist laut wikipedia 1,000292. ich behaupte, dass fertigungsbedingte schwankungen der brechzahlen von optischen gläasern höher sind, und dementsprechend das Ganze vergebliche liebesmüh ist ...


    PS: wikipedia ist nicht die einzige quelle meiner weisheit, aber die am schnellsten verfügbare
    [:I]


    lg
    birki

  • Hallo,


    &gt; weshalb ich bezweifle, dass die inbetrachtnahme von brechzahländerungen der luft durch temperatur und luftfeuchtigkeit sinnvoll ist, liegt in der grösse des effekts - n Luft ist laut wikipedia 1,000292. ich behaupte, dass fertigungsbedingte schwankungen der brechzahlen von optischen gläasern höher sind, und dementsprechend das Ganze vergebliche liebesmüh ist ...


    Du hast Recht dass diese Zahl belanglos ist, wenn der Brechungsindex überall im optischen System gleich ist. Aber wenn lokale Unterschiede im Brechungsindex auftreten, hervorgerufen beispielsweise durch Temperaturschichtung, dann sind diese Unterschiede vermutlich nicht mehr belanglos.


    Noch eine Anmerkung zu deinem Vergleich mit den Brechzahlen der optischen Gläser:
    Der Einfluss auf den Wellenfront-Fehler hängt vom Brechungsindex UND von der Weglänge ab. Und die Weglänge durch die Luft ist wesentlich grösser als die Weglänge im Glas.


    Gruss
    Michael

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />
    Noch eine Anmerkung zu deinem Vergleich mit den Brechzahlen der optischen Gläser:
    Der Einfluss auf den Wellenfront-Fehler hängt vom Brechungsindex UND von der Weglänge ab. Und die Weglänge durch die Luft ist wesentlich grösser als die Weglänge im Glas.<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    hallo!
    naja, aber die geschwindigkeit des lichts ist im glas wesentlich niedriger. eine schwankung bei n ~ 1 ist weniger bedeutend als bei n ~ 1,5
    lg
    birki

  • Hallo,


    &gt; naja, aber die geschwindigkeit des lichts ist im glas wesentlich niedriger.


    Wenn du den Faktor 1.5 als "wesentlich" ansiehst, dann ja.


    &gt; eine schwankung bei n ~ 1 ist weniger bedeutend als bei n ~ 1,5


    Kommt drauf an wie man "Schwankung" definiert, ob additiv oder multiplikativ.


    Gruss
    Michael

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />
    Wenn du den Faktor 1.5 als "wesentlich" ansiehst, dann ja.
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    ... wenn er unterm bruchstrich steht - ja [;)]
    lg
    birki

  • Hallo Michael,
    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />Hallo Hans-Jürgen,


    &gt; ... bekomme ich das Ergebnis, dass die Normalen der Wellenfront (die "Strahlen") einen Kreis beschreiben mit dem Radius n/(dn/dy), wenn y die vertikale Koordinate ist. Ein horizontal einfallender Strahl wird also näherungsweise kreisförmig abgelenkt in Richtung des größeren Brechungsindex, im Rahmen der Näherung gilt das auch für Strahlen mit kleiner positiver oder negativer y-Komponente.



    Der Hintergrund meiner Frage war natürlich wie sich so ein Temperatur-Gradient auf die interferometrische Messung eines Spiegels auswirken würde. Zwischen Interferometer und Spiegel sind ein paar Meter Luftweg, und nehmen wir mal an dass dort überall ein gleichmässiger vertikaler Temperatur-Gradient ist. Dann müssten doch alle Strahlen gleichmässig nach oben (oder unten) gebogen werden.
    Ich kann mir noch nicht vorstellen wie dadurch Astigmatismus entstehen soll. Hat jemand eine Idee?


    Gruss
    Michael
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    wenn man annimmt, dass die Strahlen in der Temperaturschichtung exakte Kreisbahnen mit dem oben angegebenen Radius beschreiben, ist der dadurch entstehende Astigmatismus tatsächlich sehr klein. Näherungsweise komme ich für ein Fernrohr mit der Brennweite f auf den Betrag Ast=f^3/2/r^2 , wobei r der Krümmungsradius der durch die Temperaturschichten gebogenen Strahlen ist, s.o. Das ist um Größenordnungen kleiner als ein beobachtbarer Effekt, insofern hat Dein Bauchgefühl recht, dass da eigentlich nichts passiert. Andererseits ist es wohl zweifelsfrei so, dass solche Temperaturbedingungen zu Astigmatismus führen, jedenfalls habe ich mehrere unabhängige Aussagen hier im board so interpretiert. Für mich ergeben sich damit folgende Möglichkeiten:


    1. Ich habe falsch gerechnet (wäre nicht das erste mal).


    2. Der Astigmatismus wird genau von den Faktoren bewirkt, die ich bei der Näherungslösung vernachlässigt habe, nämlich die Neigung der Randstrahlen. Dann würde sich ein Asti ergeben, der mit der Lichtstärke zunimmt. Wie das zu berücksichtigen ist, weiß ich nicht, wahrscheinlich müsstest Du dann tatsächlich den Strahlverlauf schrittweise berechnen. Allerdings kann ich mir nur schwer vorstellen, dass die Näherungslösung Größenordnungen von der exakten Lösung entfernt ist.


    3. Der beobachtete astigmatische Temperatureffekt wird nicht durch die angenommene <u><b>lineare</b></u> Temperaturschichtung verursacht. Auch in diesem Fall kommst Du wohl um eine schrittweise Berechnung nicht herum.


    Auf jeden Fall wünsche ich Dir viel Erfolg bei deinem Projekt.


    Falls jemand noch weitere Ideen hat, bin ich auch sehr daran interessiert.


    Gruß
    Hans-Jürgen

  • Hallo Hans-Jürgen,


    &gt; wenn man annimmt, dass die Strahlen in der Temperaturschichtung exakte Kreisbahnen mit dem oben angegebenen Radius beschreiben, ist der dadurch entstehende Astigmatismus tatsächlich sehr klein. Näherungsweise komme ich für ein Fernrohr mit der Brennweite f auf den Betrag Ast=f^3/2/r^2 , wobei r der Krümmungsradius der durch die Temperaturschichten gebogenen Strahlen ist, s.o. Das ist um Größenordnungen kleiner als ein beobachtbarer Effekt,


    Stimmt, nach dieser Formel ist der Effekt mindestens 1000 mal kleiner als dass er auffallen würde. Ich habe übrigens inzwischen den Temeraturgradienten in meinem Testraum gemessen: 0.2K auf 50cm Höhenunterschied, ziemlich unabhängig von der Tageszeit. Ich habe gleichzeitig mit drei kalibrierten Thermometern mit 0.01K Auflösung gemessen, in den Höhen 2cm, 27cm, 52cm. Der Messwert bei 27cm liegt ziemlich genau in der Mitte zwischen den anderen Messwerten, der Gradient scheint also konstant zu sein.


    &gt; jedenfalls habe ich mehrere unabhängige Aussagen hier im board so interpretiert.


    ich auch.



    &gt; 1. Ich habe falsch gerechnet (wäre nicht das erste mal).


    Liegt denn die Berechnung in einer Form vor die ich nachvollziehen könnte?



    Gruss
    Michael

  • Hallo Michael,
    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: mkoch</i>
    <br />Liegt denn die Berechnung in einer Form vor die ich nachvollziehen könnte?
    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    ich habe nur zwei Zettel mit Skizzen und handschriftlichen Rechnungen, wenn Du Interesse hast, könnte ich die einscannen und Dir als PN schicken.


    Gruß
    Hans-Jürgen

  • Hallo Hans-Jürgen,


    &gt; ich habe nur zwei Zettel mit Skizzen und handschriftlichen Rechnungen, wenn Du Interesse hast, könnte ich die einscannen und Dir als PN schicken.


    Bitte schick's mir mal rüber. Ob ich was damit anfangen kann wird sich dann zeigen.


    Gruss
    Michael

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!