예제 #1
0
 public Form1()
 {
     InitializeComponent();
     Bench = MakeDoubleGaussLens();
     //Bench.Elements.Convex = false;
     Bench.IncidentRay = new SphericLens.Ray(new SphericLens.Point(200, 20), new SphericLens.Vector(-20, 5));
     //this.KeyDown += new KeyEventHandler(pictureResult.KeyPressed);
     rayDirectionPhiNumericUpDown.Value = (decimal)(Bench.IncidentRay.Direction.Phi % (2 * Math.PI));
     SphericLens.Vector originAsVector = SphericLens.Vector.FromPoint(Bench.IncidentRay.Origin);
     rayOriginPhiNumericUpDown.Value    = (decimal)originAsVector.Phi;
     rayOriginRadiusNumericUpDown.Value = (decimal)originAsVector.Radius;
 }
예제 #2
0
파일: Form1.cs 프로젝트: bzamecnik/bokehlab
 public Form1()
 {
     InitializeComponent();
     Bench = MakeDoubleGaussLens();
     //Bench.Elements.Convex = false;
     Bench.IncidentRay = new SphericLens.Ray(new SphericLens.Point(200, 20), new SphericLens.Vector(-20, 5));
     //this.KeyDown += new KeyEventHandler(pictureResult.KeyPressed);
     rayDirectionPhiNumericUpDown.Value = (decimal)(Bench.IncidentRay.Direction.Phi % (2 * Math.PI));
     SphericLens.Vector originAsVector = SphericLens.Vector.FromPoint(Bench.IncidentRay.Origin);
     rayOriginPhiNumericUpDown.Value = (decimal)originAsVector.Phi;
     rayOriginRadiusNumericUpDown.Value = (decimal)originAsVector.Radius;
 }
예제 #3
0
 private SphericLens.OpticalBench MakeBiconvexLens()
 {
     SphericLens.OpticalBench bench = new SphericLens.OpticalBench();
     // bench.LensCenter = -100.0;
     SphericLens.SphericalCap element0 = new SphericLens.SphericalCap()
     {
         Convex              = true,
         Radius              = 150.0,
         Aperture            = 100.0,
         NextRefractiveIndex = SphericLens.RefractiveIndices.CROWN_GLASS,
     };
     bench.Elements.Add(element0);
     element0.DistanceToNext = 2 * element0.Thickness;
     bench.Elements.Add(
         new SphericLens.SphericalCap()
     {
         Convex              = false,
         Radius              = 150.0,
         Aperture            = 100.0,
         NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
     }
         );
     return(bench);
 }
예제 #4
0
파일: Form1.cs 프로젝트: bzamecnik/bokehlab
 private SphericLens.OpticalBench MakeBiconvexLens()
 {
     SphericLens.OpticalBench bench = new SphericLens.OpticalBench();
     // bench.LensCenter = -100.0;
     SphericLens.SphericalCap element0 = new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 150.0,
             Aperture = 100.0,
             NextRefractiveIndex = SphericLens.RefractiveIndices.CROWN_GLASS,
         };
     bench.Elements.Add(element0);
     element0.DistanceToNext = 2 * element0.Thickness;
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = false,
             Radius = 150.0,
             Aperture = 100.0,
             NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
         }
     );
     return bench;
 }
예제 #5
0
        private SphericLens.OpticalBench MakeDoubleGaussLens()
        {
            SphericLens.OpticalBench bench = new SphericLens.OpticalBench();
            // bench.LensCenter = -100.0;
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 58.950,
                DistanceToNext      = 7.520,
                NextRefractiveIndex = 1.670,
                Aperture            = 50.4,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 169.660,
                DistanceToNext      = 0.240,
                NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
                Aperture            = 50.4,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 38.550,
                DistanceToNext      = 8.050,
                NextRefractiveIndex = 1.670,
                Aperture            = 46.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 81.540,
                DistanceToNext      = 6.550,
                NextRefractiveIndex = 1.699,
                Aperture            = 46.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 25.500,
                DistanceToNext      = 11.410 + 9.0,
                NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
                Aperture            = 36.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.CircularStop()
            {
                DistanceToNext      = 9.0,
                NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
                Aperture            = 34.2,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = false,
                Radius              = 28.990,
                DistanceToNext      = 2.360,
                NextRefractiveIndex = 1.603,
                Aperture            = 34.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 81.540,
                DistanceToNext      = 12.130,
                NextRefractiveIndex = 1.658,
                Aperture            = 40.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = false,
                Radius              = 40.770,
                DistanceToNext      = 0.380,
                NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
                Aperture            = 40.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex              = true,
                Radius              = 874.130,
                DistanceToNext      = 6.440,
                NextRefractiveIndex = 1.717,
                Aperture            = 40.0,
            }
                );
            bench.Elements.Add(
                new SphericLens.SphericalCap()
            {
                Convex = false,
                Radius = 79.460,
                NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
                Aperture            = 40.0,
            }
                );
            double scaleFactor = 3.0;
            bool   aperturesGivenAsDiameter = true;

            foreach (SphericLens.OpticalElement element in bench.Elements)
            {
                double apertureScaleFactor = scaleFactor * (aperturesGivenAsDiameter ? 0.5 : 1.0);
                // TODO: hey, this is ugly!!!
                if (element is SphericLens.SphericalCap)
                {
                    SphericLens.SphericalCap cap = element as SphericLens.SphericalCap;
                    cap.Radius   *= scaleFactor;
                    cap.Aperture *= apertureScaleFactor;
                }
                else if (element is SphericLens.CircularStop)
                {
                    SphericLens.CircularStop stop = element as SphericLens.CircularStop;
                    stop.Aperture *= apertureScaleFactor;
                }
                element.DistanceToNext *= scaleFactor;
            }
            return(bench);
        }
예제 #6
0
파일: Form1.cs 프로젝트: bzamecnik/bokehlab
 private SphericLens.OpticalBench MakeDoubleGaussLens()
 {
     SphericLens.OpticalBench bench = new SphericLens.OpticalBench();
     // bench.LensCenter = -100.0;
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 58.950,
             DistanceToNext = 7.520,
             NextRefractiveIndex = 1.670,
             Aperture = 50.4,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 169.660,
             DistanceToNext = 0.240,
             NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
             Aperture = 50.4,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 38.550,
             DistanceToNext = 8.050,
             NextRefractiveIndex = 1.670,
             Aperture = 46.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 81.540,
             DistanceToNext = 6.550,
             NextRefractiveIndex = 1.699,
             Aperture = 46.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 25.500,
             DistanceToNext = 11.410 + 9.0,
             NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
             Aperture = 36.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.CircularStop()
         {
             DistanceToNext = 9.0,
             NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
             Aperture = 34.2,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = false,
             Radius = 28.990,
             DistanceToNext = 2.360,
             NextRefractiveIndex = 1.603,
             Aperture = 34.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 81.540,
             DistanceToNext = 12.130,
             NextRefractiveIndex = 1.658,
             Aperture = 40.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = false,
             Radius = 40.770,
             DistanceToNext = 0.380,
             NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
             Aperture = 40.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = true,
             Radius = 874.130,
             DistanceToNext = 6.440,
             NextRefractiveIndex = 1.717,
             Aperture = 40.0,
         }
     );
     bench.Elements.Add(
         new SphericLens.SphericalCap()
         {
             Convex = false,
             Radius = 79.460,
             NextRefractiveIndex = SphericLens.RefractiveIndices.AIR,
             Aperture = 40.0,
         }
     );
     double scaleFactor = 3.0;
     bool aperturesGivenAsDiameter = true;
     foreach (SphericLens.OpticalElement element in bench.Elements)
     {
         double apertureScaleFactor = scaleFactor * (aperturesGivenAsDiameter ? 0.5 : 1.0);
         // TODO: hey, this is ugly!!!
         if (element is SphericLens.SphericalCap)
         {
             SphericLens.SphericalCap cap = element as SphericLens.SphericalCap;
             cap.Radius *= scaleFactor;
             cap.Aperture *= apertureScaleFactor;
         }
         else if (element is SphericLens.CircularStop)
         {
             SphericLens.CircularStop stop = element as SphericLens.CircularStop;
             stop.Aperture *= apertureScaleFactor;
         }
         element.DistanceToNext *= scaleFactor;
     }
     return bench;
 }