You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
def paraxial_matrix(self, n0, l):
# Reflection and Refraction of Gaussian Light Beams at
# Tilted Ellipsoidal Surfaces
# G. A. Massey and A. E. Siegman
# Applied Optics IP, vol. 8, Issue 5, p.975
#
# [y', u'] = M * [y, u]
n, md = super(Spheroid, self).paraxial_matrix(n0, l)
c = self.curvature
if self.aspherics is not None:
c = c + 2*self.aspherics[0]
theta = self.angles[0] if self.angles is not None else 0.
costheta = np.cos(theta)
m = np.eye(4)
if self.material is not None:
if self.material.mirror:
m[2, 0] = 2*c*costheta
m[3, 1] = 2*c/costheta
else:
mu = n/n0
p = np.sqrt(mu**2 + costheta**2 - 1)
m[1, 1] = p/(mu*costheta)
m[2, 0] = n0*c*(costheta - p)
m[3, 1] = mu*m[2, 0]/(costheta*p)
m[3, 3] = 1/m[1, 1]
m = np.dot(m, md)
if self.angles is not None:
# FIXME angles is incomplete:
# rotate to meridional/sagittal then compute total incidence
# angle, matrix, then rotate back
phi = self.angles[2]
cphi, sphi = np.cos(phi), np.sin(phi)
r1 = np.array([[cphi, -sphi], [sphi, -cphi]])
r = np.eye(4)
r[:2, :2] = r[2:, 2:] = r1
m = np.dot(r, np.dot(m, r.T))
Maybe you could give me hint. It is unclear to me why the angle[0] would be in anyway special. Why is angle[1] not taken into account, or is this indeed what is meant by the FIXME comment: that we rotate the system until only one angle is nonzero?
But: Why is theta in the above function equal angle[0] and not something like u[0] +angle[0]
Thx
Max
The text was updated successfully, but these errors were encountered:
The treatment of arbitrarily tilted spheroids is incomplete (that's why there is the FIXME).
In a simple (planar) tilted system, angles[0] is the x-tilt ("in plane", a.k.a. theta) and the only rotation there is. angles is an rxyz-style set of euler angles. In an element with only a an x and a z tilt, theta = angles[0] and phi = angles[2]. u is the angle of the ray and doesn't matter for the matrix.
For "general" tilts, it is more complicated and needs to be calculated as sketched out in the FIXME.
Maybe you could give me hint. It is unclear to me why the angle[0] would be in anyway special. Why is angle[1] not taken into account, or is this indeed what is meant by the FIXME comment: that we rotate the system until only one angle is nonzero?
But: Why is theta in the above function equal angle[0] and not something like u[0] +angle[0]
Thx
Max
The text was updated successfully, but these errors were encountered: