Пример #1
0
 public kandydat(punkt a, punkt b)
 {
     p1 = a;
     p2 = b;
     x  = Math.Min(a.dajX(), b.dajX());
     y  = Math.Min(a.dajY(), b.dajY());
 }
Пример #2
0
 public int porownaj2(punkt a)
 {
     if (dystans() != a.dystans())
     {
         if (dystans() > a.dystans())
         {
             return(-1);
         }
         else
         {
             return(1);
         }
     }
     else
     {
         if (x > a.dajX())
         {
             return(1);
         }
         else
         {
             return(-1);
         }
     }
 }
Пример #3
0
 public int porownaj1(punkt a)
 {
     if (x != a.dajX())
     {
         if (x > a.dajX())
         {
             return(-1);
         }
         else
         {
             return(1);
         }
     }
     else
     {
         if (x > a.dajY())
         {
             return(1);
         }
         else
         {
             return(-1);
         }
     }
 }
Пример #4
0
        public bool tenSam(punkt a)
        {
            bool wynik = false;

            if (x == a.dajX() && y == a.dajY())
            {
                wynik = true;
            }
            return(wynik);
        }
Пример #5
0
        public static void dodajLinie(punkt p1, punkt p2)
        {
            if (p1.dajX() == p2.dajX() && p1.dajY() == p2.dajY())
            {
                return;
            }

            if (p1.dajX() == p2.dajX() || p1.dajY() == p2.dajY())
            {
                galaz.Add(new linia(p1, p2));
                return;
            }

            punkt tmp = new punkt(Math.Max(p1.dajX(), p2.dajX()), Math.Min(p1.dajY(), p2.dajY()));

            dodajLinie(p1, tmp);
            dodajLinie(p2, tmp);
        }
Пример #6
0
        static void Main(string[] args)
        {
            var             s         = new FileInfo(Directory.GetCurrentDirectory());
            var             s2        = s.Directory.Parent.Parent;
            String          sciezka   = s2.ToString() + "\\dane.csv";
            List <punkt>    punkty    = new List <punkt>();
            List <punkt>    skrajne   = new List <punkt>();
            List <kandydat> kandydaci = new List <kandydat>();

            galaz = new List <linia>();
            punkt tmp;

            using (var reader = new StreamReader(sciezka))
            {
                while (!reader.EndOfStream)
                {
                    var line   = reader.ReadLine();
                    var values = line.Split(',');

                    tmp = new punkt(Convert.ToInt32(values[0]), Convert.ToInt32(values[1]));
                    punkty.Add(tmp);
                }
            }

            punkty.Sort((a, b) => (a.porownaj1(b)));

            while (punkty.Count > 1)
            {
                int miotla = 0;
                skrajne.Clear();
                kandydaci.Clear();

                foreach (punkt pu in punkty)
                {
                    if (pu.dajY() >= miotla)
                    {
                        skrajne.Add(pu);
                        miotla = pu.dajY();
                    }
                }

                if (skrajne.Count() == 1)
                {
                    punkt jest = skrajne.ElementAt(0);
                    punkt max  = new punkt(0, 0);

                    foreach (punkt pun in punkty)
                    {
                        if (pun.porownaj2(max) == -1 && pun.tenSam(jest) == false)
                        {
                            max = pun;
                        }
                    }
                    skrajne.Add(max);
                }

                skrajne.Sort((a, b) => (a.porownaj1(b)));

                for (int i = 1; i < skrajne.Count(); i++)
                {
                    kandydaci.Add(new kandydat(skrajne.ElementAt(i - 1), skrajne.ElementAt(i)));
                }

                kandydaci.Sort((a, b) => (a.porownaj(b)));
                kandydat wybrany = kandydaci.ElementAt(0);
                punkt    p       = wybrany.dajP();
                punkt    q       = wybrany.dajQ();
                punkty.Remove(p);
                punkty.Remove(q);
                punkt pq = new punkt(wybrany.dajX(), wybrany.dajY());

                bool dodano = false;
                for (int i = 0; i < punkty.Count(); i++)
                {
                    if (pq.porownaj1(punkty.ElementAt(i)) == -1)
                    {
                        punkty.Insert(i, pq);
                        dodano = true;
                        break;
                    }
                }
                if (dodano == false)
                {
                    punkty.Add(pq);
                }
                dodajLinie(p, pq);
                dodajLinie(q, pq);
            }

            punkt r = new punkt(0, 0);

            dodajLinie(punkty.ElementAt(0), r);

            foreach (linia l in galaz)
            {
                l.napisz();
            }


            Console.ReadKey();
        }
Пример #7
0
 public linia(punkt P1, punkt P2)
 {
     p1 = P1;
     p2 = P2;
 }