Example #1
0
        static void Main(string[] args)
        {
            Macierz a = new Macierz(3, 2), b = new Macierz(3, 2);

            a.InicjalizujMacierz();
            Console.WriteLine("Macierz A: ");
            a.WypiszMacierz();
            Console.WriteLine("\nMacierz B: ");
            b.InicjalizujMacierz();
            b.WypiszMacierz();
            Console.WriteLine("\nMacierz A + B: ");
            (a + b).WypiszMacierz();
            Console.WriteLine("\nMacierz A - B: ");
            (a - b).WypiszMacierz();
            Console.WriteLine("\nMacierz 2 * A: ");
            (2 * a).WypiszMacierz();
            Macierz c = new Macierz(2, 1);

            c.InicjalizujMacierz();
            Console.WriteLine("\nMacierz C: ");
            c.WypiszMacierz();
            Console.WriteLine("\nMacierz A * C: ");
            (a * c).WypiszMacierz();
            Macierz d = (Macierz)33;

            Console.WriteLine("\nMacierz D: ");
            d.WypiszMacierz();
            Console.ReadKey();
        }
Example #2
0
 public static void InicjalizujMacierz(this Macierz a)
 {
     for (int i = 1; i <= a.LiczbaWierszy; i++)
     {
         for (int j = 1; j <= a.LiczbaKolumn; j++)
         {
             a[i, j] = generator.Next(0, 11);
         }
     }
 }
Example #3
0
 public void DodajMacierz(Macierz inp)
 {
     if ((inp.lkolumn != this.lkolumn) || (inp.lwierszy != this.lwierszy))
     {
         Console.WriteLine("Dodawanie niemożliwe, błędne parametry");
     }
     else
     {
         for (int i = 0; i < this.lwierszy; i++)
         {
             this.wiersze[i].DodajWektor(inp.ZwrocWiersz(i));
         }
     }
 }
    static void Main()
    {
        Wektor w  = new Wektor(new float[] { 9.0f, 7.4f, 2f, 2.1f });
        Wektor w2 = new Wektor(new float[] { 7f, 3f, 2f, 1f });


        Wektor w4 = new Wektor(new float[] { 2f, 3f });
        Wektor w5 = new Wektor(new float[] { 12f, 4f });
        Wektor w6 = new Wektor(new float[] { 2f, 5.2f });
        Wektor w7 = new Wektor(new float[] { 12.1f, 9f });

        Console.Write("wektor w: ");
        w.drukujWektor();
        Console.Write("wektor w2: ");
        w2.drukujWektor();

        Wektor w3 = Wektor.dodaj(w, w2);

        Console.Write("wektor w+w2: ");
        w3.drukujWektor();
        Macierz m = new Macierz(new Wektor[] { w, w2, w3 });

        Console.Write("\nmacierz m: \n");
        m.drukujMacierz();

        Macierz m2 = new Macierz(new Wektor[] { w4, w5, w6, w7 });

        Console.Write("\nmacierz m2: \n");
        m2.drukujMacierz();

        Macierz wynik = Macierz.iloczynMacierzy(m, m2);

        Console.Write("\nmacierz m*m2:\n");
        wynik.drukujMacierz();

        Macierz dod = Macierz.sumaMacierzy(m, m);

        Console.Write("\nmacierz m+m:\n");
        dod.drukujMacierz();

        Wektor v = Macierz.ilocznynMacierzWek(m, w3);

        Console.Write("\nwektor m*(w+w2): ");
        v.drukujWektor();

        Macierz.sumaMacierzy(m, m2);
        Wektor.dodaj(w, w4);
    }
Example #5
0
    public static Wektor ilocznynMacierzWek(Macierz m, Wektor w)
    {
        if (w.vectorSize() != m.cols)
        {
            Console.WriteLine("\nNie mozna przemnozyc macierzy przez wektor.");
            return(null);
        }
        int    i;
        Wektor wynik = new Wektor(m.rows);

        for (i = 0; i < m.rows; i++)
        {
            wynik.wektor[i] = Wektor.iloczynSkalarny(m.macierz[i], w);
        }
        return(wynik);
    }
Example #6
0
 public static void WypiszMacierz(this Macierz a)
 {
     Console.Write("[ ");
     for (int i = 1; i <= a.LiczbaWierszy; i++)
     {
         Console.Write("<");
         for (int j = 1; j <= a.LiczbaKolumn; j++)
         {
             Console.Write(a[i, j]);
             if (j != a.LiczbaKolumn)
             {
                 Console.Write("; ");
             }
         }
         Console.Write("> ");
     }
     Console.Write("]");
 }
Example #7
0
    public static Macierz sumaMacierzy(Macierz m1, Macierz m2)
    {
        if (m1.cols != m2.cols || m1.rows != m2.rows)
        {
            Console.WriteLine("\nMacierze roznych rozmiarow. Nie mozna dodac.");
            return(null);
        }
        Macierz wynik = new Macierz(m1.rows, m1.cols);
        int     i, j;

        for (i = 0; i < m1.rows; i++)
        {
            for (j = 0; j < m1.cols; j++)
            {
                wynik.macierz[i].wektor[j] = m1.macierz[i].wektor[j] + m2.macierz[i].wektor[j];
            }
        }
        return(wynik);
    }
Example #8
0
        private Wektor fR;                                //wektor przesunięcia układu obserwatora;
                                                          //---------------------------------------------------------------------------
                                                          //	Konstruktor główny, inicjujący wszystkie parametry przekształcenia 3d
                                                          //  Trzy ostatnie paramtry (metryczny opis ekranu) nie są wymagane -
                                                          //  zostaną obliczone ze wymiarów pikselowych i  standardowej pozycji
                                                          //  komputerowca przed monitorem .
        public T3d(Punkt obs,                             //pozycja obserwatora
                   int xe0, int ye0, int eszer, int ewys, //okno ekranowe w pikselach
                   float odl_ekr  = 0,                    //typowa odległość oczu od monitora
                   float szer_ekr = 0, float wys_ekr = 0) //fizyczny opis ekranu w metrach
        {
            Punkt  centrum = new Punkt(0, 0, 0);          //tam patrzy obserwator
            Wektor pion    = new Wektor(0, 0, 1);         //pomocniczy wektor, orientujący obserwatora w 3d

            if (odl_ekr <= 0)
            {
                odl_ekr = 0.5f;
            }
            if (szer_ekr <= 0)                                //gdy nie określono rozmiarów ekranu
            {
                szer_ekr = (float)eszer * 0.0257f / 96.0f;    //0.0257 m = 1 cal. Ekran ma 96 pikseli/cal
            }
            if (wys_ekr <= 0)
            {
                wys_ekr = (float)ewys * 0.0257f / 96.0f;
            }

            s = new Skala(xe0, ye0, eszer, ewys, 0, 0, szer_ekr, wys_ekr);

            Wektor w3 = new Wektor(obs, centrum);          //lokalny wektor z obserwatora (wkazujący środek układu)

            w3.unormuj();

            Wektor w1 = new Wektor();

            w1 = (pion ^ w3);                               //lokalny wektor osi x' obserwatora
            w1.unormuj();

            Wektor w2 = new Wektor();

            w2 = (w3 ^ w1);                                //lokalny wektor osi y' obserwatora
            w1 = -w1;                                      //lewoskrętność układu obserwatora

            M = new Macierz(w1, w2, w3);                   //macierz przekształcenia

            fodl_ekr = odl_ekr;                            //parametry potrzebne innym funkcjom
            fR       = new Wektor(obs, new Punkt());       //tyle dystansu dzieli układy odniesienia
        }
Example #9
0
    // m1*m2
    public static Macierz iloczynMacierzy(Macierz m1, Macierz m2)
    {
        Macierz wynik = new Macierz(m1.rows, m2.cols);
        int     i, j, k;
        float   w = 0f;

        for (i = 0; i < m1.rows; i++)
        {
            for (j = 0; j < m2.cols; j++)
            {
                w = 0f;
                // iloczyn skalarny i-tego wiersza m1 i j-tej kol. m2
                for (k = 0; k < m1.cols; k++)
                {
                    w += m1.macierz[i].wektor[k] * m2.macierz[k].wektor[j];
                }
                wynik.macierz[i].wektor[j] = w;
            }
        }
        return(wynik);
    }
Example #10
0
 public Wektor.Macierz Przemnoz(Macierz inp)
 {
     if (this.lkolumn != inp.lwierszy)
     {
         Console.WriteLine("Invalid input");
         return(default(Wektor.Macierz));
     }
     Wektor[] scratch = new Wektor[this.lwierszy];
     for (int i = 0; i < this.lwierszy; i++)
     {
         float[] nowy_wiersz = new float[this.lkolumn];
         for (int k = 0; k < this.lkolumn; k++)
         {
             for (int j = 0; j < inp.lwierszy; j++)
             {
                 nowy_wiersz[k] += (this.ZwrocWiersz(i)).ZwrocReprezentacje(j + 1) * (inp.ZwrocWiersz(j)).ZwrocReprezentacje(k + 1);
             }
         }
         Wektor pom = new Wektor(nowy_wiersz);
         scratch[i] = pom;
     }
     Wektor.Macierz temp = new Wektor.Macierz(scratch);
     return(temp);
 }
Example #11
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);
            }