Пример #1
0
        public Pravac(Tocka t1, Tocka t2)
        {
            T1 = t1;
            T2 = t2;
            if ((T2.t.X - T1.t.X) != 0)
            {
                koef_smjera = (float)(T2.t.Y - T1.t.Y) / (float)(T2.t.X - T1.t.X);
            }
            else
            {
                koef_smjera = 0;
            }

            if (T2.t.Y - T1.t.Y != 0)
            {
                koef_smjera_poY = (float)(T2.t.X - T1.t.X) / (T2.t.Y - T1.t.Y);
            }
            else
            {
                koef_smjera_poY = 0;
            }

            sin = ((t2.t.Y - t1.t.Y) * (t2.t.Y - t1.t.Y)) / (t1.Distanca(t2) * t1.Distanca(t2));
            cos = ((t2.t.X - t1.t.X) * (t2.t.X - t1.t.X)) / (t1.Distanca(t2) * t1.Distanca(t2));
        }
Пример #2
0
 public Pravac(Pravac p, Tocka toc)
 {
     koef_smjera     = -1 / p.koef_smjera;
     koef_smjera_poY = -1 / p.koef_smjera_poY;
     T1  = toc;
     T2  = new Tocka(new Point(T1.t.X + 1000, (int)(this.IzracunajYza(T1.t.X + 1000))));
     sin = ((T2.t.Y - T1.t.Y) * (T2.t.Y - T1.t.Y)) / (T1.Distanca(T2) * T1.Distanca(T2));
     cos = ((T2.t.X - T1.t.X) * (T2.t.X - T1.t.X)) / (T1.Distanca(T2) * T1.Distanca(T2));
 }
Пример #3
0
        private void button7_Click(object sender, EventArgs e)
        {
            Pen    blackPen = new Pen(Color.Black);
            Pravac p        = new Pravac(AA, BB);

            AA.Draw(drawArea, blackPen);
            BB.Draw(drawArea, blackPen);
            p.Draw(drawArea, blackPen);


            Pravac ort = new Pravac(p, BB);

            Tocka OB = new Tocka(new Point((int)ort.IzracunajXza(AA.t.Y), AA.t.Y));

            OB.Draw(drawArea, blackPen);


            int udaljenost_AB       = BB.t.X - AA.t.X;
            int udaljenost_na_X_osi = OB.t.X - AA.t.X;

            float korak            = (float)udaljenost_na_X_osi / (float)udaljenost_AB;
            int   broj_ponavljanja = (int)(Math.Round(udaljenost_na_X_osi / korak));

            //skenopostav

            lista_crta.Clear();

            drawArea.Clear(Color.White);
            Random r = new Random();



            niz_Tocaka = new Tocka[10];
            lista_crta.Add(p);
            for (int i = 0; i < 10; i++)
            {
                niz_Tocaka[i] = new Tocka(new Point(r.Next(50, 400), r.Next(0, 260)));
                lista_crta.Add(new Pravac(AA, niz_Tocaka[i]));
                lista_crta.Add(new Pravac(niz_Tocaka[i], BB));
                niz_Tocaka[i].Draw(drawArea, blackPen);
            }

            foreach (Pravac prav in lista_crta)
            {
                prav.Draw(drawArea, blackPen);
            }



            Tocka[] niz_tocaka_izbivenog_vektora = new Tocka[udaljenost_AB];



            float X_os = AA.t.X;

            for (int i = 0; i < udaljenost_AB; i++)
            {
                float finalna_udaljenost = 0;
                bool  unutra;
                int   koliko = 0;
                X_os += korak;
                Pravac ort_virtualna  = new Pravac(p, new Tocka(new Point((int)Math.Round(X_os), AA.t.Y)));
                Tocka  sjec_na_kosini = ort_virtualna.sjeciste_pravaca(p);



                foreach (Pravac virt_prav in lista_crta)
                {
                    unutra = false;

                    Tocka virt_sjeciste = ort_virtualna.sjeciste_pravaca(virt_prav);

                    Pravac gran_ort_a = new Pravac(p, virt_prav.T1);
                    Pravac gran_ort_b = new Pravac(p, virt_prav.T2);

                    float granica_A_vrijednost = gran_ort_a.IzracunajXza(virt_sjeciste.t.Y);
                    float granica_B_vrijednost = gran_ort_b.IzracunajXza(virt_sjeciste.t.Y);



                    if (virt_sjeciste.t.X > granica_A_vrijednost && virt_sjeciste.t.X <= granica_B_vrijednost)
                    {
                        unutra = true;
                    }

                    if (unutra)
                    {
                        koliko++;
                        if (virt_sjeciste.t.X < sjec_na_kosini.t.X)
                        {
                            finalna_udaljenost += sjec_na_kosini.Distanca(virt_sjeciste);
                        }
                        else
                        {
                            finalna_udaljenost -= sjec_na_kosini.Distanca(virt_sjeciste);
                        }
                    }
                }
                if (koliko != 11)
                {
                    MessageBox.Show(koliko.ToString());
                }
                finalna_udaljenost = finalna_udaljenost / koliko;



                double finalni_X;
                double finalni_Y;
                if (finalna_udaljenost > 0)
                {
                    finalna_udaljenost *= finalna_udaljenost;
                    //Math.Round(test3.T1.t.X+Math.Sqrt(test3.cos*10000)),(int)Math.Round(test3.T1.t.Y+Math.Sqrt(test3.sin*10000)))
                    finalni_X = sjec_na_kosini.t.X - Math.Sqrt(ort_virtualna.cos * finalna_udaljenost);
                    finalni_Y = sjec_na_kosini.t.Y - Math.Sqrt(ort_virtualna.sin * finalna_udaljenost);
                }
                else
                {
                    finalna_udaljenost *= finalna_udaljenost;
                    finalni_X           = sjec_na_kosini.t.X + Math.Sqrt(ort_virtualna.cos * finalna_udaljenost);
                    finalni_Y           = sjec_na_kosini.t.Y + Math.Sqrt(ort_virtualna.sin * finalna_udaljenost);
                }

                niz_tocaka_izbivenog_vektora[i] = new Tocka(new Point((int)Math.Round(finalni_X), (int)Math.Round(finalni_Y)));
            }

            Tocka min  = niz_Tocaka[0];
            float mini = 200;


            foreach (Tocka t in niz_Tocaka)
            {
                foreach (Tocka s in niz_tocaka_izbivenog_vektora)
                {
                    if (s.Distanca(t) < mini)
                    {
                        mini = s.Distanca(t);
                        min  = t;
                    }
                }
            }
            min.DrawZuto(drawArea, blackPen);

            foreach (Tocka t in niz_tocaka_izbivenog_vektora)
            {
                t.DrawManje(drawArea, blackPen);
            }
        }