public void TraceCenteredRay() { BiconvexLens lens = new BiconvexLens(); lens.ApertureRadius = 2; lens.CurvatureRadius = 2.5; Vector3d objectPos = new Vector3d(0, 0, 10); Vector3d lensPos = lens.GetBackSurfaceSample(new Vector2d(1, 1)); Ray result = lens.Transfer(objectPos, lensPos); Assert.NotNull(result); Assert.Equal(new Vector3d(0, 0, -1), Vector3d.Normalize(result.Direction)); Assert.Equal(-lensPos, result.Origin); }
public void TraceParallelRays() { BiconvexLens lens = new BiconvexLens(); lens.ApertureRadius = 2; lens.CurvatureRadius = 4; Sampler sampler = new Sampler(); int sampleCount = 64; int sqrtSampleCount = (int)Math.Sqrt(sampleCount); Vector3d objectPos = new Vector3d(10, 0, 100); foreach (Vector2d sample in sampler.GenerateJitteredSamples(sqrtSampleCount)) { Vector3d lensPos = lens.GetBackSurfaceSample(sample); //Vector3d objectPos = lensPos + 10 * Vector3d.UnitZ + 2 * Vector3d.UnitX; Ray result = lens.Transfer(objectPos, lensPos); } }
public BiconvexLensForm() { InitializeComponent(); biconvexLens = new BiconvexLens() { CurvatureRadius = 150, ApertureRadius = 100, RefractiveIndex = Materials.Fixed.GLASS_CROWN_BK7 }; complexLens = ComplexLens.CreateBiconvexLens(150, 100, 0); double directionPhi = Math.PI; incomingRay = new Ray(new Vector3d(70, 0, 150), new Vector3d(Math.Sin(directionPhi), 0, Math.Cos(directionPhi))); rayDirectionPhiNumeric.Value = (decimal)directionPhi; curvatureRadiusNumeric.Value = (decimal)biconvexLens.CurvatureRadius; apertureRadiusNumeric.Value = (decimal)biconvexLens.ApertureRadius; FillVectorToControls(incomingRay.Origin, rayOriginXNumeric, rayOriginYNumeric, rayOriginZNumeric); initialized = true; Recompute(); }