public void ustaw(WykresModel wykres) { Wykres ustawienia_wykresu = new Wykres(); float najmniejszaWartosc_y = wykres.get_y(0); float najwiekszaWartosc_y = wykres.get_y(0); float najmniejszaWartosc_x = wykres.get_x(0); float najwiekszaWartosc_x = wykres.get_x(0); for (int i = 0; i < wykres.punkty.Count; i++) { if (wykres.get_y(i) > najwiekszaWartosc_y) { najwiekszaWartosc_y = wykres.get_y(i); ustawienia_wykresu.pik_mapa = i; } if (wykres.get_y(i) < najmniejszaWartosc_y) { najmniejszaWartosc_y = wykres.get_y(i); } } for (int i = 0; i < wykres.punkty.Count; i++) { if (wykres.get_x(i) > najwiekszaWartosc_x) { najwiekszaWartosc_x = wykres.get_x(i); } if (wykres.get_x(i) < najmniejszaWartosc_x) { najmniejszaWartosc_x = wykres.get_x(i); } } ustawienia_wykresu.najmniejsza_x = najmniejszaWartosc_x; ustawienia_wykresu.najwieksza_x = najwiekszaWartosc_x; ustawienia_wykresu.podzialka_x = (najwiekszaWartosc_x - najmniejszaWartosc_x) / 16; ustawienia_wykresu.zakres_wykresuX = najwiekszaWartosc_x - najmniejszaWartosc_x; ustawienia_wykresu.zakres_wykresuY = najwiekszaWartosc_y - najmniejszaWartosc_y; ustawienia_wykresu.najmniejsza_y = najmniejszaWartosc_y; ustawienia_wykresu.najwieksza_y = najwiekszaWartosc_y; ustawienia_wykresu.podzialka_y = (najwiekszaWartosc_y - najmniejszaWartosc_y) / 18; ustawienia.Add(ustawienia_wykresu); }
public WykresModel pokaz_wykres_L(int numer_wykresu) { WykresModel wykres = new WykresModel(); int liczbElementow = Iterator[numer_wykresu] - Iterator[numer_wykresu - 1] - 1; wykres.punkty = punkty.GetRange(Iterator[numer_wykresu - 1] + 1, liczbElementow); return(wykres); }
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); }
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); }
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); }