/// <summary> /// Creates and initializes a new instance of a complex lens. /// </summary> /// <param name="surfaces">List of element surfaces, ordered from /// back to front.</param> public ComplexLens(IList<ElementSurface> surfaces) { ElementSurfaces = surfaces; ElementSurface frontSurface = surfaces.LastOrDefault((surface) => surface.Surface is Sphere); frontSphericalSurface = (Sphere)frontSurface.Surface; frontSurfaceSinTheta = frontSphericalSurface.GetCapElevationAngleSine(frontSurface.ApertureRadius); frontSurfaceApertureRadius = frontSurface.ApertureRadius; ElementSurface backSurface = surfaces.FirstOrDefault((surface) => surface.Surface is Sphere); backSphericalSurface = (Sphere)backSurface.Surface; backSurfaceSinTheta = backSphericalSurface.GetCapElevationAngleSine(backSurface.ApertureRadius); backSurfaceApertureRadius = backSurface.ApertureRadius; MediumRefractiveIndex = Materials.Fixed.AIR; frontSurface.NextRefractiveIndex = MediumRefractiveIndex; }