Home

   Alignment

    >  2-Star-Alignment

    >  Parallaktisches Alignment

    >  Scheiner-Methode

   Schrittmotor-Steuerung

    >  Controller Elektronik

    >  ASCOM Treiber Download

    >  Verwendung an Astro3-Montierung

    >  Controller Code Download

   Optik

   >  Raytracing

Gemeinschaft Bad Cannstatt

   > Veranstaltungen

Karl-Heinz Schweikert   

Home   

Stand: 22. Sep 2010

 

 

Ray Tracing 

Im folgenden werden die Formeln für eine exakte geometrische (d.h. ohne Berücksichtigung von Beugungseffekten) Durchrechnung optischer Systeme mit beliebigen, windschiefen Strahlen in 3 Dimensionen hergeleitet. Hierbei wird vor allem die klassische Vektorrechnung verwendet. Vektoren sind dabei fett dargestellt, z.B. v = [vx, vy, vz].

Ein Strahl wird beschrieben durch einen Ausgangspunkt p = [px,py,pz] und eine Richtung, die durch einen Vektor u = [ux, uy, uz] mit Länge 1 festgelegt wird. Die Strahldurchrechnung des Systems erfolgt von einer optischen Fläche zur nächsten mit diesen Schritten:

Der Schnittpunkt des Strahls mit der Fläche zusammen mit der neuen Richtung definiert den nächsten Strahlabschnitt.

 

Berechnung des Schnittpunkts

Der Flächenschnittpunkt q = p +k*u ergibt sich, indem man vom Ausgangspunkt p den Richtungsvektor u genau k mal verlängert:

 qx = px + k*ux                                                                                                                                                                             Gln.1 
 qy = py + k*uy
 qz = pz + k*uz

Die Fläche wird durch eine Gleichung F1(z) = F2(x,y) beschrieben. Werden für den Schnittpunkt die oben angegebenen Beziehungen für q eingesetzt, ergibt sich eine Gleichung mit der Unbekannten k.

.

Beispiel: Fläche ist ein Kegelschnitt, der um z-Achse rotiert ist.

.


Exkurs: Kegelschnitte
Die weitaus meisten optischen Fläche lassen sich durch 'Kegelschnitte' beschreiben, also durch 2-dimensionale Kurven wie Kreis, Ellipse, Parabel, Hyperbel, die um die Symmetrieachse rotiert eine Fläche in Form von einer Sphäre (=Kugel), einem Ellipsoid, Paraboloid oder Hyperboloid ergeben.
Die Form wird dabei von der Exzentrizität e bzw. der Konischen Konstanten cc=-e² festgelegt, die Abmessungen durch den Krümmungsradius r im Scheitelpunkt. Dieser Wert kann positiv oder negativ sein, je nachdem sich die Fläche in positive oder negative Achsrichtung erstreckt.

cc=0: Kreis,    0<|cc|<1: Ellipse,    cc=-1: Parabel,    cc <-1: Hyperbel


.

 

 

Diese Fläche (Scheitelpunkt in m = [mx,my,mz]) wird beschrieben durch die Gleichung

 (x-mx)² + (y-my)² = 2*r* (z-mz) - (1+cc) * (z-mz)²                                                                                                                        Gl.2

mit  cc =Kegelschnittkonstante, r  = Kegelschnittparameter = Krümmungsradius im Scheitelpunkt

Für den Strahlschnittpunkt q gilt [qx,qy,qz] = [px+k*ux, py+k*uy, pz+k*uz], also nach Einsetzen in Gl.2:

 (px-mx+k*ux)²+(py-my+k*uy)² - 2*r*(pz-mz+k*uz) + (1+cc)*(pz-mz+k*uz)² = 0                                                                         Gl.3
.

aufgelöst ergibt sich

   k²*(1+cc*uz²) - 2*k*(-cc*(pz-mz)*uz + r*uz - S(pi-mi)*ui ) + S(pi-mi)²  + cc*(pz-mz)² - 2*r(pz-mz) = 0     (S ist Summe über i=x,y,z)

.

Mit den Abkürzungen 

 a = 1+cc*uz²
 b = -cc*(pz-mz)*uz + r*uz - (px-mx)*ux - (py-my)*uy - (pz-mz)*uz
 c = (px-mx)² + (py-my)²  + (pz-mz)² + cc*(pz-mz)² - 2*r(pz-mz)

lautet die quadratische Gleichung  

   k²*a - 2*k*b + c = 0

.

Die Lösung für k lautet

 k = (b - Sgn(r)*Sqr(b²-a*c))/a                                                                                                                                                        Gl.4

.

Die quadratische Gleichung hat im allgemeinen 2 Lösungen für k, d.h. 2 Schnittpunkte mit der unbegrenzten Fläche.
Je nach Krümmungsrichtung des verwendeten Flächenteils muss für den Wurzelausdruck Sqr(...) das passende Vorzeichen gewählt werden, abhängig davon, ob der zweite (nicht realisierte) Schnittpunkt in Strahlrichtung gesehen vor oder hinter dem wirklichen Schnittpunkt liegt. 
Die Signumfunktion Sgn(arg) liefert das Vorzeichen des Arguments, d.h. +1 für arg>0, -1 für arg<0, und 0 für arg=0.

Den Schnittpunkt q = p +k*u erhält man durch Einsetzen von k in Gln.1

.

Spezialfälle:

a=0   

 k = c/(2*b), einfache lineare Gleichung (d.h. es existiert nur 1 Schnittpunkt)

r -> unendlich (Planfläche)   

 k = (mz- pz)/uz

b²-ac < 0   

 es existiert kein Schnittpunkt mit der Fläche

b²-ac=0   

 der Strahl streift die Fläche

.

 

Komplexere Flächen

Bei komplexeren Flächen (z.B. durch Polynomreihen o.ä. beschrieben und nicht notwendigerweise rotationssymmetrisch) kann man entsprechend vorgehen. Man erhält eine Gleichung höherer Ordnung in k, die aber im allgemeinen nicht mehr geschlossen gelöst werden kann, so dass numerische Verfahren angewandt werden müssen. Falls die Abweichungen der Fläche zu einer Standardfläche (Planfläche, Sphäre, Paraboloid, usw) nur klein sind, kann der Schnittpunkt mit dieser Standardfläche als Initialwert für k verwendet werden. Selbst einfache Verfahren wie Newton-Raphson konvergieren dann normalerweise extrem schnell.

Beispiel: 

   F(x,y) = (z-mz) = S aij*((xi-mi) i *(yi-mi) j )               Polynomreihe in x,y, Gln.1 für den Schnittpunkt eingesetzt gibt

   pz-mz+k*u - S aij((px-mx+k*ux) i *(py-my+k*uy) j ) = 0,         Lösung für k suchen und wieder in Gln.1 einsetzen.

.

 

Bestimmung des Normalenvektors

Für eine allgemeine Funktion F(x,y) wird die Normale durch den Vektor n = [-dF/dx, -dF/dy, 1] beschrieben, der noch auf Länge 1 normiert werden muss.

Bei (2-dimensionalen) Kegelschnitten y² = 2*r*z + (1+cc)*z² wird der Normalenvektor n = [ny,nz] am besten aus dem Tangentenvektor t = [ty,tz] bestimmt. Da beide senkrecht aufeinander stehen, gilt [ny,nz] =[-tz,ty].

Die Tangente [dy,dz] erhält man, indem man die Differenz zu einem infinitesimal entfernten Nachbarpunkt (y+dy)² = 2*r*(z+dz) + (1+cc)*(z+dz)² betrachtet. Beim Grenzübergang dy,dz->0 entfallen alle Terme mit (dy)² oder (dz)², und es bleibt:

   dz/dy = (r-(1+cc)*z) / y, also t = [ r-(1+cc)*z, y), damit n = [y, (1+cc)*z-r].

Im rotationssymmetrischen 3-dimensionalen Fall ergibt sich dann

 n = [x, y, (1+cc)*z-r].                                                                                                                                                        Gl.5

.

 

Berechnung des reflektierten bzw. gebrochenen Strahls

Aus dem einfallenden Strahl u und dem Normalenvektor n lässt sich der ausgehende Strahl v durch Linearkombination bestimmen. Damit ist automatisch die Bedingung erfüllt, dass alle 3 Strahlen in einer Ebene liegen.

.

Reflektion:

Aus der Skizze ergibt sich unmittelbar die Beziehung

 v = u - 2*(n·u)*n                                                                                                                                                              Gl.6

.

 

Brechung:

Für v wird eine Linearkombination u+k*n angesetzt, normiert auf Länge 1 ergibt sich  v = (u+k*n) / |u+k*n|

Das Snell'sche Brechungsgesetz für die Brechungsindizes n1 und n2 fordert

 n1*sin(w1) = n2*sin(w2)
.

mit w1, w2 = Winkel zwischen einfallendem Strahl u bzw. ausgehendem Strahl v und Normalenvektor n.

Die Sinusfunktion kann über das Vektorprodukt der beteiligten Vektoren ausgedrückt werden: 

   sin(w1) = |u x n|,    sin(w2)=|v x n|, damit wird:

   n1*|u x n| = n2*|v x n|,                                     v durch u ausgedrückt

         = n2*|(u + k*n) x n| / |u + k*n|,        ausmultipliziert

         = n2*|u x n + k*(n x n)| / |u + k*n|,  mit (n x n) = 0 folgt

         = n2*|u x n| / |u + k*n| ,                   |u x n| gekürzt, falls es nicht zu sehr 0 ist ;-)

      n2/n1 = |u + k*n

Um das Betragsquadrat aufzulösen wird auf beiden Seiten quadriert:

   (n2/n1)² = (u + k*n)² = (u·u) + 2*k* (u·n) + k²*(n·n),

mit den Skalarprodukten (u·u) = 1, (n·n) = 1,  (u·n) = (ux*nx + uy*ny + uz*nz) ergibt sich eine quadratische Gleichung in k:

   k² + 2*k* (u·n) +1- (n2/n1)² = 0,  deren Lösung ist

 

 k = Sgn(u·n) * Sqr( (u·n)² + (n2/n1)² - 1) - (u·n)                                                                                                                                      Gl.7
.

 

Das Vorzeichen der Wurzel muss dabei passend zum Skalarprodukt (u·n) gewählt werden.
Der Ausdruck unter der Wurzel kann auch negativ werden, in diesem Fall liegt Totalreflektion vor und es existiert kein gebrochener Strahl.

Durch Einsetzen von k ergibt sich für den gebrochenen Strahl

 v = (u + k*n) / |u + k*n|                                                                                                                                                                         Gl.8

.

Hinweis zum Normalenvektor:

Es ist unerheblich, ob der Normalenvektor nach oben oder unten (bzw. rechts oder links) definiert wird. Alle Formeln für Reflektion und Refraktion liefern das selbe Ergebnis, wenn n durch -n ersetzt wird.

.

 

Beispiel: Kegelschnitt mit überlagerten Zernike-Funktionen

Im folgenden soll als kleines Rechenbeispiel eine etwas kompliziertere Oberfläche betrachtet werden, die aus einer Kegelschnitt-Rotationsfläche besteht und der nicht-rotationssymmetrische Zernike-Funktionen überlagert sind. Zernike-Funktionen werden häufig dazu verwendet, Abweichungen von einer idealen Fläche (hier dem Kegelschnitt) z.B. infolge von Fertigungsfehlern zu beschreiben. 

 

Zernike-Funktionen sind gewichtete Summen von Polynomen und Winkelfunktionen, jeder Summenterm ist mit einem typischen Abbildungsfehler korreliert (wenn man die zusätzlichen bildseitigen Abhängigkeiten außer Acht lässt). 

Definiert werden Zernike-Funktionen  durch die Beziehung

 Zmn(rho,phi) =  Rmn(rho) * Pm(phi),         mit  n = 0,1,...unendlich;  m = -n, -n+2, ..., n-2, n 

 Z(rho, phi) = S (Amn * Zmn)  
.   

mit den Polarkoordinaten: rho = Radius (auf 1 normiert: rho=0...1);   phi=Azimutwinkel (0...2*p)

Rmn(rho) sind Polynome in rho; Pm(phi) =  cos(m*phi) bzw. P-m(phi) = sin(m*phi) die zugehörigen Winkelfunktionen;

Amn die Gewichtungsfaktoren des jeweiligen Zernike-Terms, die die Gesamtform der Oberfläche festlegen.

Zmn

gerade Funktion (-)

ungerade Funktion (+)

Vergleich: Seidelfehler mit der selben
 Radial- und Winkelabhängigkeit

Z00

1

 

Z11

 rho*cos(phi) 

 rho*sin(phi)

 Verzeichnung

Z02

 2*rho2-1 

 Bildfeldkrümmung

Z22

 rho2*cos(2*phi) 

 rho2*sin(2*phi) 

 Astigmatismus

Z13

 (3*rho3-2*rho)*cos(phi) 

 (3*rho3-2*rho)*sin(phi) 

 Koma

Z33

 rho3*cos(3*phi) 

 rho3*sin(3*phi)

 

Z04

 6*rho4-6*rho2+1 

 Sphärische Aberration

Z24

 (4*rho4-3*rho2)*cos(2*phi) 

 (4*rho4-3*rho2)*sin(2*phi)

 

Z44

 rho4*cos(4*phi)

rho4*sin(4*phi)

 

...

 

 

 

Tabelle einiger Zernike-Funktionen 

.

Schematische Darstellung einiger Zernike-Funktionen durch farbcodierte Funktionswerte.
Gerade und ungerade Funktionen sind bis auf eine Drehung um 90°/m identisch.

.

 

Hier zunächst eine Zusammenstellung einiger Beziehungen, die später gebraucht werden:

 


Exkurs: Ableitungsregeln

Diese Herleitung macht intensiven Gebrauch von Funktionsableitungen, deshalb hier eine kurze Zusammenstellung der wichtigsten Regeln:
a) Bei einer Funktion F(x,y) sollen die Argumente von einer Größe u abhängen: x(u), y(u). Dann ist dF/du = (dF/dx)*(dx/du) + (dF/dy)*(dy/du)
b) Eine Funktion bestehe aus 2 Termen F(x) = G(x)*H(x), dann ist dF/dx = G*(dH/dx) + H*(dG/dx)
.

.

 

x,y sind die kartesischen Koordinaten in der Ebene senkrecht zur optischen Achse, rho und phi die Polarkoordinaten. 
Der absolute Radius eines Punkts auf der betrachteten Ebene ist r = D/2*rho. 

Wie in vielen Programmiersprachen üblich, wird mit sqr() die Quadratwurzel (square root) bezeichnet, atan() ist der Arcustangens.

   rho = 2*r/D;     d rho/dr = 2/D;     r = sqr(x² + y²),      dr/dx = x/r,  dr/dy = y/r

   phi = atan(y/x),       d phi/dx = -y/r²,    d phi/dy = x/r²

   Der radialabhängige Term Rmn = S ai*rhoenthält nur einfache Potenzen von rho, deren Ableitung ist dRmn/d rho = S ai*i*rhoi-1.

   Für die Ableitung von Pm gilt: d sin(m*phi)/d phi = m*cos(m*phi);  d cos(m*phi)/d phi = -m*sin(m*phi).

Eine spezielle Behandlung ist für den Fall r = x = y = 0 erforderlich. Ein Grenzübergang von der (positiven) x bzw y Achse aus ergibt

   a) für y = 0, damit r = x, phi = 0, x->0:       dr/dx = 1,  dr/dy = 0,  d phi/dx = 0

   b) für x = 0, damit r = y, phi = pi/2, y->0 :  dr/dx = 0,  dr/dy = 1,  d phi/dy = 0

Der Grenzübergang ist von jeder Achse aus jeder Richtung möglich und liefert im Falle 'glatter' Funktionen (ohne Sprünge und Knicke, und das ist bei allen Zernike-Funktionen  gegeben) das selbe Ergebnis.
.

Die Ableitung der Zernike-Funktionen  für den Fall rho>0 ist

   Zx = S Amn * (dZmn/dx) = S Amn * (Rmn* (dPm/d phi)*(d phi/dx) + Pm* (dRmn/d rho)*(d rho/dr)*(dr/dx)

   Zy = S Amn * (dZmn/dy) = S Amn * (Rmn* (dPm/d phi)*(d phi/dy) + Pm* (dRmn/d rho)*(d rho/dr)*(dr/dy) ) 

.

oder speziell für den Fall rho = 0:

   ZxS Amn * (dZmn/dx) = S Amn * Pm(phi=0) * (dRmn/d rho)*(d rho/dr)*1 

   ZyS Amn * (dZmn/dy) = S Amn * Pm(phi=pi/2) * (dRmn/d rho)*(d rho/dr)*1 

.

Nach diesen langen Vorbemerkungen kommen wir jetzt zum eigentlichen Problem...

.

Flächengleichung

Die Fläche soll eine Überlagerung von Kegelschnitt und Zernike-Funktionen  sein:

  z = F(x,y) = FCone(x,y) + FZernike(x,y)

 

Für den reinen Kegelschnitt-Anteil  FCone = (F - FZernike) gilt die Kegelschnitt-Gleichung:

 

  x² + y² = 2*rCone*(F - FZernike) - (1+cc)*(F - FZernike)²           mit FZernike = Z = S Amn * Rmn* Pm
.

.

Schnittpunkt der Fläche mit dem Strahl

Der Strahl wird wieder beschrieben durch Startpunkt p und Strahlrichtung u. Für den Schnittpunkt q gilt q = p + k*u.

Diese Beziehung wird in die Flächengleichung eingesetzt und daraus k bestimmt. Das ist hier in geschlossener Form nicht mehr möglich, so dass ein iteratives Näherungsverfahren z.B. nach Newton-Raphson eingesetzt wird, das bei üblichen optischen Anordnungen sehr schnell konvergiert (etwas problematisch wird es, wenn fast streifende Strahlen vorliegen; hier liegen die Mehrfach-Schnittpunkte nicht eindeutig auseinander)

 

 


Exkurs: Newton-Raphson

Für eine Funktion von F soll eine Nullstelle gesucht werden: F(x) = 0. Ist F nicht in geschlossener Form nach x auflösbar, kann ein Näherungsverfahren verwendet werden. Für das Newton-Raphson-Verfahren muss die Ableitung dF/dx bekannt sein. Dann kann ausgehend von einem Startwert x0 die Funktion F(x) an der Stelle x=x0 bestimmt werden, deren Wert natürlich von Null abweicht, solange x0 nicht den korrekten Wert besitzt. 
Die ungefähr geltende Beziehung dF/dx ~ F(x0)/(x0-x) wird nach x aufgelöst und ergibt einen neuen (besseren) Wert, der wieder eingesetzt wird, um einen zweiten (noch besseren) Wert zu erhalten, usw. Den jeweils nächsten x-Wert erhält man aus dem Vorgängerwert durch

     xn+1 = xn - F(xn)/(dF/dx)    wobei der Wert von dF/dx ebenfalls an der Stelle xn genommen wird.

Das Verfahren wird iterativ so lange fortgesetzt, bis F(xn) genügend nahe an 0 liegt (Abbruchkriterium). Dann ist xn+1 beliebig nahe am gesuchten Wert x.
.

 

 

Die Flächengleichung wird umgestellt, so dass eine Seite zu Null wird. Da nur ein Näherungswert für k verwendet wird, wird die Gleichung auch nicht exakt Null, sondern einen Fehler Err ergeben:

  Err(k) = g(x,y) - h(FCone)  

            mit    g(x,y) = x2+y2,     h(FCone) = 2*rCone*FCone - (1+cc)*FCone2 ,

            und   FCone(k) = F - FZernike(rho(r(x(k), y(k))), phi(x(k), y(k))),    x = px + k*ux,    y = py + k*uy,    F = pz + k*uz

.

Für Newton-Raphson wird die Ableitung nach k benötigt:

  dErr/dk = (dg/dx)*(dx/dk) + (dg/dy)*(dy/dk) - (dh/dFCone)*(dF/dk - (dFZernike/dx)*(dx/dk) - (dFZernike/dy)*(dy/dk) )

              = 2*(px + k*ux)*ux + 2*(py + k*uy)*uy - (2*rCone - 2*(1+cc)*(pz + k*uz - Z(k))) * (uz - Zx(k)*ux - Zy(k)*uy )

.

Damit sind alle für das Newton-Raphson-Verfahren benötigte Größen bekannt, und ein Näherungswert für k kann iterativ berechnet werden:

 

  kn+1 = kn + Err(kn)/(dErr/dk|kn
.

Der Startwert k0 muss noch irgendwie ungefähr bestimmt werden. Falls - wie häufig - die Zernike-Funktionen  nur kleine Korrekturen an der Kegelschnitt-Form darstellen, ist der weiter oben in geschlossener Form abgeleitete Wert k für den reinen Kegelschnitt eine sehr gute Wahl für k0. Auch der leicht zu berechnende Schnittpunkt mit der Tangentialebene im Scheitelpunkt der Fläche kann unter Umständen verwendet werden.

Der Schnittpunkt q ergibt sich bei bekanntem k aus der Beziehung q = p + k*u.

.

Normalenvektor

Der Normalenvektor n senkrecht auf einer Fläche F(x,y) ist wie bereits früher angegeben [-dF/dx, -dF/dy, 1].

F(x,y) ist über die oben angegebene Flächengleichung 

  g(x,y)=h(FCone), mit FCone=F-FZernike 

definiert. 

Die Ableitungen von F erhält man, in dem man beide Seiten nach x bzw. y ableitet 

  (dg/dx) = (dh/dFCone)*(dF/dx - dFZernike/dx)

  (dg/dy) = (dh/dFCone)*(dF/dy - dFZernike/dy)

.

und nach dF/dx bzw. dF/dy auflöst:

  dF/dx = (dg/dx)/(dh/dFCone) + dFZernike/dx        = 2*x/(2*rCone - 2*(1+cc)*FCone) + Zxmn

  dF/dy = (dg/dy)/(dh/dFCone) + dFZernike/dy        = 2*y/(2*rCone - 2*(1+cc)*FCone) + Zymn

.

Die gesuchten Werte der Ableitungen an der Stelle des Strahl-Schnittpunkts q = [qx, qy, qz] sind

  dF/dx|q = qx/(rCone -(1+cc)*(qz-Z(qx,qy))) + Zx(qx,qy)

  dF/dy|q = qy/(rCone -(1+cc)*(qz-Z(qx,qy))) + Zy(qx,qy)

.

damit wird der Normalenvektor

  n = [qx / ((1+cc)*(qz-Z(qx,qy)) - rCone ) - Zx(qx,qy),       qy / ((1+cc)*(qz-Z(qx,qy)) - rCone ) - Zy(qx,qy),      1]
.

.

Aus Einfallsrichtung u und Normalenvektor n kann wie bereits oben beschrieben (Gln 6+8) der reflektierte bzw. gebrochene Strahl v berechnet werden:

   Reflektion: v = u - 2*(n·u)*n

   Brechung:  v = (u + kb*n) / |u + kb*n|            mit kb = Sgn(u·n) * Sqr( (u·n)+(n2/n1)² - 1) - (u·n)

.

 

Erweiterung: Verkippte Flächen

Das Verkippen von Flächen ergibt meist etwas unhandliche Ausdrücke. Viel einfacher ist es, statt der Fläche den Strahl (Ausgangspunkt und Richtung) zu kippen. Ein optisches Element mit mehreren Flächen sei um den Punkt k verkippt, und zwar um den Winkel wx um die x-Achse und wy um die y-Achse.
Für die Berechnung dann...

Rotationsformeln:

Rotation um die x-Achse   

Rotation um die y-Achse

 u'x = ux   

 u'x = ux*cos(wy) + uz*sin(wy)

 u'y = uy*cos(wx) + uz*sin(wx)   

 u'y = uy

 u'z = -uy*sin(wx) + uz*cos(wx)   

 u'z = -ux*sin(wy) + uz*cos(wy)

.

 

Raytracing als Excel-Tabelle

Hier kann eine Exceltabelle heruntergeladen werden, welche die beschriebenen Formeln (die Zernikegeschichte und Verkippung fehlt noch ...) als Makrofunktion implementiert hat. Da Excel keine Vektoren darstellen kann, aber beliebige Text-Strings in den Zellen erlaubt sind, habe ich einen Strahl in Textform definiert mit diesem Format:

Ray = "Status; px; py; pz; ux; uy; uz"

mit Status = 1: Strahl nach rechts, =-1: Strahl nach links (reflektiert), =0: Strahl unterbrochen

Eine optische Oberfläche ist ebenfalls in Textform definiert mit dem Format

Surface = "Typ; n1;n2; mx; my; mz; r; e; d [,mz']"   (mit zusätzlichem mz' bei aufgefaltetem Strahlengang bei Spiegeln)

   mit Typ:"m"-mirror, "r"-refraction;

   n1,n2:Brechungsindex; mi:Scheitelpositionen; r:'Radius' bzw Kegelschnittparameter (r=0 entspricht Planfläche mit r=unendlich);

   cc: konische Konstante, d: Blendendurchmesser (>0:Strahl stoppt, <0:Strahl geht vorbei, =0: keine Blende)

Eine VBA-Funktion "Trace (Surface as String, Ray as String) as String" liest Surface und Ray-Strings, berechnet den Schnittpunkt und die neue Richtung, und gibt diese als Text wieder aus, so dass das Ergebnis durch die Trace()-Funktion in der nächsten Zelle gelesen und weiterverarbeitet werden kann.

Auch eine primitive Graphik ist implementiert, die eine y-z Projektion des Systems darstellt. Hierfür wird ein "Data"-Tabellenblatt erstellt, das die Strahl- und Oberflächenpositionen enthält (muss noch von Hand gemacht werden. Freiwillige vor: das geht auch per Makro!). Diese Information kann dann in einem Chart dargestellt werden (hierfür gibt's schon von mir ein Makro 'DrawChart', das mit Ctrl-D aufgerufen werden kann), und das Änderungen in Surface- oder Ray-Daten sofort anzeigt.

.

Download Exceltabelle  RayTrace.zip  (ca 100kB)
Änderung vom 29.10.06: die alte Liste hat sich 'verschluckt', wenn im Betriebssystem Komma statt Punkt als Dezimaltrennzeichen eingestellt war. Jetzt habe ich ausschließlich gutmütige VBA-Funktionen verwendet, die das Problem (hoffentlich) beseitigen sollten.

.

 

Kontakt

Alle Klarheiten restlos beseitigt? Bei Fragen, Korrekturen, Anregungen, Ergänzungen, Kommentaren einfach kurze Mail.

Dr. Karl-Heinz Schweikert, Stuttgart

Home     Top

 

Korrekturen:

22.09.2010: in Gln 7 ist unter der Wurzel ein Quadrat verlorengegangen ...