Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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();
        }