Ejemplo n.º 1
0
        public void Skaluj(UstawieniaModel.Wykres dane)
        {
            WykresModel wykres = new WykresModel();
            WykresModel skaluj = new WykresModel();

            wykres.punkty = punkty.GetRange(0, punkty.Count);
            punkty.Clear();
            float zakres  = dane.zakres_wykresuX;
            float zakres2 = dane.zakres_wykresuY;
            float min_y   = dane.najmniejsza_y;
            float min_x   = dane.najmniejsza_x;

            for (int i = 0; i < wykres.punkty.Count; i++)
            {
                skaluj.Add_p(wykres.get_x(i) * (760 / zakres) - ((760 / zakres) * (min_x - 60) + (min_x - 60)), (400 + (min_y * (360 / zakres2))) - wykres.get_y(i) * (359 / zakres2) - 1);
            }
            punkty = skaluj.punkty.GetRange(0, skaluj.punkty.Count);
        }
Ejemplo n.º 2
0
        public void pokaz_wykres_M(WykresModel wykres, UstawieniaModel ustawienia, int c, bool szerokosc)
        {
            UstawieniaModel.Wykres ustaw = new UstawieniaModel.Wykres();
            Mapa newMapa = new Mapa();

            if (szerokosc)
            {
                ustaw = ustawienia.ustawienia[c];
                FWHM_Model.aproksymacja_gaussa gauss = new FWHM_Model.aproksymacja_gaussa();
                double FWHM = gauss.fitting(wykres, ustaw);

                if (FWHM == 0)
                {
                    kolor.Add(Color.Gray);
                }
                else if (FWHM > 0 && FWHM < 1)
                {
                    kolor.Add(Color.Violet);
                }
                else if (FWHM > 1 && FWHM < 1.5)
                {
                    kolor.Add(Color.DarkViolet);
                }
                else if (FWHM > 1.5 && FWHM < 2)
                {
                    kolor.Add(Color.Blue);
                }
                else if (FWHM > 2 && FWHM < 2.5)
                {
                    kolor.Add(Color.Aquamarine);
                }
                else if (FWHM > 2.5 && FWHM < 3)
                {
                    kolor.Add(Color.Green);
                }
                else if (FWHM > 3 && FWHM < 3.5)
                {
                    kolor.Add(Color.Orange);
                }
                else if (FWHM > 3.5 && FWHM < 4)
                {
                    kolor.Add(Color.Yellow);
                }
                else if (FWHM > 4 && FWHM < 4.5)
                {
                    kolor.Add(Color.Brown);
                }
                else if (FWHM > 4.5)
                {
                    kolor.Add(Color.Red);
                }
            }
            else
            {
                ustaw = ustawienia.ustawienia[c];
                if (wykres.get_x(ustaw.pik_mapa + 1) < 362.3)
                {
                    kolor.Add(Color.Violet);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.3 && wykres.get_x(ustaw.pik_mapa + 1) < 362.4)
                {
                    kolor.Add(Color.DarkViolet);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.4 && wykres.get_x(ustaw.pik_mapa + 1) < 362.5)
                {
                    kolor.Add(Color.Blue);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.5 && wykres.get_x(ustaw.pik_mapa + 1) < 362.6)
                {
                    kolor.Add(Color.Aquamarine);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.6 && wykres.get_x(ustaw.pik_mapa + 1) < 362.7)
                {
                    kolor.Add(Color.Green);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.7 && wykres.get_x(ustaw.pik_mapa + 1) < 362.8)
                {
                    kolor.Add(Color.Orange);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.8 && wykres.get_x(ustaw.pik_mapa + 1) < 362.9)
                {
                    kolor.Add(Color.Yellow);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 362.9 && wykres.get_x(ustaw.pik_mapa + 1) < 363)
                {
                    kolor.Add(Color.Brown);
                }
                else if (wykres.get_x(ustaw.pik_mapa + 1) > 363)
                {
                    kolor.Add(Color.Red);
                }
            }



            newMapa.x = wykres.get_x(wykres.Iterator[c]);
            newMapa.y = wykres.get_y(wykres.Iterator[c]);
            add_mapa(newMapa);
        }
Ejemplo n.º 3
0
            public double fitting(WykresModel dane, UstawieniaModel.Wykres ustawienia)
            {
                Macierz macierz = new Macierz();

                int  index   = ustawienia.pik_mapa;
                bool _1000_p = false;
                bool _1000_m = false;

                for (int i = 0; i < dane.punkty.Count - 1; i++)
                {
                    double y  = (double)dane.get_y(index);
                    double y2 = Math.Pow((double)dane.get_y(index), 2);

                    if (i == 0)
                    {
                        Ey2   += y2;
                        Elny2 += y2 * Math.Log(y);
                    }
                    else
                    {
                        double yminus  = (double)dane.get_y(index - i);
                        double yplus   = (double)dane.get_y(index + i);
                        double y2minus = Math.Pow((double)dane.get_y(index - i), 2);
                        double y2plus  = Math.Pow((double)dane.get_y(index + i), 2);
                        double xminus  = (double)dane.get_x(index - i) - dane.get_x(index);
                        double xplus   = (double)dane.get_x(index + i) - dane.get_x(index);
                        if (yminus > 1000)
                        {
                            Ey2     += y2minus;
                            Exy2    += xminus * y2minus;
                            Ex2y2   += Math.Pow(xminus, 2) * y2minus;
                            Ex3y2   += Math.Pow(xminus, 3) * y2minus;
                            Ex4y2   += Math.Pow(xminus, 4) * y2minus;
                            Elny2   += Math.Log(yminus) * y2minus;
                            Exlny2  += xminus * Math.Log(yminus) * y2minus;
                            Ex2lny2 += Math.Pow(xminus, 2) * Math.Log(yminus) * y2minus;
                        }
                        else
                        {
                            _1000_m = true;
                        }

                        if (yplus > 1000)
                        {
                            Ey2     += y2plus;
                            Exy2    += xplus * y2plus;
                            Ex2y2   += Math.Pow(xplus, 2) * y2plus;
                            Ex3y2   += Math.Pow(xplus, 3) * y2plus;
                            Ex4y2   += Math.Pow(xplus, 4) * y2plus;
                            Elny2   += Math.Log(yplus) * y2plus;
                            Exlny2  += xplus * Math.Log(yplus) * y2plus;
                            Ex2lny2 += Math.Pow(xplus, 2) * Math.Log(yplus) * y2plus;
                        }
                        else
                        {
                            _1000_p = true;
                        }
                    }

                    if (_1000_m == true && _1000_p == true)
                    {
                        break;
                    }
                }
                double[,] nowa_macierz = new double[, ] {
                    { Ey2, Exy2, Ex2y2 },
                    { Exy2, Ex2y2, Ex3y2 },
                    { Ex2y2, Ex3y2, Ex4y2 }
                };

                detA = macierz.oblicz(nowa_macierz);

                double[,] nowa_macierz1 = new double[, ] {
                    { Elny2, Exy2, Ex2y2 },
                    { Exlny2, Ex2y2, Ex3y2 },
                    { Ex2lny2, Ex3y2, Ex4y2 }
                };

                detA1 = macierz.oblicz(nowa_macierz1);

                nowa_macierz = new double[, ] {
                    { Ey2, Elny2, Ex2y2 },
                    { Exy2, Exlny2, Ex3y2 },
                    { Ex2y2, Ex2lny2, Ex4y2 }
                };

                detA2 = macierz.oblicz(nowa_macierz);

                nowa_macierz = new double[, ] {
                    { Ey2, Exy2, Elny2 },
                    { Exy2, Ex2y2, Exlny2 },
                    { Ex2y2, Ex3y2, Ex2lny2 }
                };

                detA3 = macierz.oblicz(nowa_macierz);

                a     = detA1 / detA;
                b     = detA2 / detA;
                c     = detA3 / detA;
                mikro = -b / (2 * c);
                kond  = Math.Sqrt(-1 / (2 * c));
                A     = Math.Exp(a - (b * b) / (4 * c));
                FWHM  = 2 * Math.Sqrt(2 * Math.Log(2)) * kond;
                if (c < 0 && c > -2)
                {
                    return(A);
                }

                return(0);
            }