Exemple #1
0
        public static void FindSphericalCorrection(List <EllipseParameter> ellipses, double waveLength, double filmDistance, ref double radiusInverse, ref double radiusInverseDev)
        {
            double        weightTotal = 0;
            double        tempRtotal  = 0;
            List <double> r           = new List <double>();

            for (int i = 0; i < ellipses.Count; i++)
            {
                for (int j = i + 1; j < ellipses.Count; j++)
                {
                    for (int k = 0; k < ellipses[i].millimeters.Count; k++)
                    {
                        if (!double.IsNaN(ellipses[i].millimeters[k]) && !double.IsNaN(ellipses[j].millimeters[k]))
                        {
                            double obs1 = ellipses[i].millimeters[k];
                            double obs2 = ellipses[j].millimeters[k];
                            double d1   = ellipses[i].d;
                            double d2   = ellipses[j].d;

                            double tempR  = FindParameter.FindSphericalCorrection(obs1, obs2, d1, d2, waveLength, filmDistance);
                            double sigma1 = FindParameter.FindSphericalCorrection(obs1, obs2 + 0.01, d1, d2, waveLength, filmDistance) - tempR;
                            if (sigma1 != 0)
                            {
                                weightTotal += 1 / (sigma1 * sigma1);
                                tempRtotal  += tempR / (sigma1 * sigma1);
                                r.Add(tempR);
                            }
                        }
                    }
                }
            }

            if (weightTotal > 0 && !double.IsInfinity(weightTotal))
            {
                radiusInverse   += tempRtotal / weightTotal;
                radiusInverseDev = Statistics.Deviation(r.ToArray()) / Math.Sqrt(Math.Sqrt(2 * r.Count));
            }
        }