Example #1
0
        private void TworzPolaczeniaKopiowanychTras(Punkt <double> punktA, Punkt <double> punktB)
        {
            WierzcholekChodnika wierzcholekA = DodajLubZnajdzWierzcholek(punktA);
            WierzcholekChodnika wierzcholekB = DodajLubZnajdzWierzcholek(punktB);

            Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, wierzcholekB));
        }
Example #2
0
        private void LaczTraseWWierzcholku(KrawedzGrafu trasa, WierzcholekChodnika laczacyWierzcholek)
        {
            WierzcholekChodnika wierzcholekA = (WierzcholekChodnika)trasa.WierzcholekA;
            WierzcholekChodnika wierzcholekB = (WierzcholekChodnika)trasa.WierzcholekB;

            Chodniki.Remove(trasa.UsunKrawedz());
            Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, laczacyWierzcholek));
            Chodniki.Add(KrawedzGrafu.StworzDroge(laczacyWierzcholek, wierzcholekB));
        }
Example #3
0
        private WierzcholekChodnika DodajLubZnajdzWierzcholek(Punkt <double> pozycja)
        {
            WierzcholekChodnika wierzcholek = WierzcholkiChodnikow.Find(obiekt => obiekt.Pozycja.Equals(pozycja));

            if (wierzcholek == null)
            {
                WierzcholkiChodnikow.Add(wierzcholek = new WierzcholekChodnika(pozycja, TypWierzcholkaPieszych.ChodnikDrogi));
            }

            return(wierzcholek);
        }
Example #4
0
        private WierzcholekChodnika DzielTraseWPunkcie(KrawedzGrafu trasa, Punkt <double> punkt)
        {
            WierzcholekChodnika wierzcholekA        = (WierzcholekChodnika)trasa.WierzcholekA;
            WierzcholekChodnika wierzcholekB        = (WierzcholekChodnika)trasa.WierzcholekB;
            WierzcholekChodnika dzielacyWierzcholek = new WierzcholekChodnika(punkt, TypWierzcholkaPieszych.ChodnikDrogi);

            WierzcholkiChodnikow.Add(dzielacyWierzcholek);

            Chodniki.Remove(trasa.UsunKrawedz());
            Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, dzielacyWierzcholek));
            Chodniki.Add(KrawedzGrafu.StworzDroge(dzielacyWierzcholek, wierzcholekB));

            return(dzielacyWierzcholek);
        }
Example #5
0
        private void ProbujLaczycChodnik(Punkt <double> punkt, WierzcholekChodnika wierzcholek)
        {
            WierzcholekChodnika szukanyWierzcholek = WierzcholkiChodnikow.Find(o => o.Pozycja.Equals(punkt));

            if (szukanyWierzcholek != null)
            {
                Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholek, szukanyWierzcholek));
            }
            else
            {
                KrawedzGrafu szukanaKrawedz = SzukajDrogiPomiedzyPunktem(punkt);
                if (szukanaKrawedz != null)
                {
                    szukanyWierzcholek = DzielTraseWPunkcie(szukanaKrawedz, punkt);
                    Chodniki.Add(KrawedzGrafu.StworzDroge(szukanyWierzcholek, wierzcholek));
                }
            }
        }
Example #6
0
        public void PoruszaniePostaci()
        {
            if (trasa.Count > 0)
            {
                if (!czyCzekamNaPozwolenie)
                {
                    Geometria geometriaPieszyCel = new Geometria(new Punkt <double>(trasa[0].Pozycja.X * 40 + 20, trasa[0].Pozycja.Y * 40 + 20),
                                                                 new Punkt <double>(ZwrocPozycje().X + obrazek.Width / 2, ZwrocPozycje().Y + obrazek.Height / 2));

                    if (geometriaPieszyCel.ObliczOdlegloscPomiedzy() >= 2)
                    {
                        UstawPozycje(new Punkt <double>(ZwrocPozycje().X + geometriaPieszyCel.ObliczWektorPrzesuniecia(1.5).X,
                                                        ZwrocPozycje().Y + geometriaPieszyCel.ObliczWektorPrzesuniecia(1.5).Y));

                        obrazek.RenderTransform = new RotateTransform(geometriaPieszyCel.ObliczKatPomiedzy());
                    }
                    else
                    {
                        ObecnaPozycja = trasa[0];
                        trasa.RemoveAt(0);
                        czyCzekamNaPozwolenie = true;
                    }
                }

                if (czyCzekamNaPozwolenie && trasa.Count > 0)
                {
                    if (trasa[0].CzyMogeWejsc(this))
                    {
                        ObecnaPozycja.Wyjdz(this);
                        czyCzekamNaPozwolenie = false;
                        trasa[0].Wejdz(this);
                    }
                }
            }
            else
            {
                Dispose();
            }
        }
Example #7
0
        /// <summary>
        /// Usówa nadmiarowe skrzyżowania
        /// </summary>
        private void RedukujPolaczenia()
        {
            foreach (WierzcholekChodnika wierzcholek in WierzcholkiChodnikow)
            {
                if (wierzcholek.CzyJestDrogaWLewo() && wierzcholek.CzyJestDrogaWPrawo())
                {
                    if (!(wierzcholek.CzyJestDrogaWDol() || wierzcholek.CzyJestDrogaWGore()))
                    {
                        WierzcholekChodnika wierzcholekA = (WierzcholekChodnika)wierzcholek.ZwrocKrawedzLewa().ZwrocPrzeciwnyWierzcholek(wierzcholek);
                        WierzcholekChodnika wierzcholekB = (WierzcholekChodnika)wierzcholek.ZwrocKrawedzPrawa().ZwrocPrzeciwnyWierzcholek(wierzcholek);

                        Chodniki.Remove(wierzcholek.ZwrocKrawedzLewa().UsunKrawedz());
                        Chodniki.Remove(wierzcholek.ZwrocKrawedzPrawa().UsunKrawedz());
                        Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, wierzcholekB));
                    }
                }
                if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWGore())
                {
                    if (!(wierzcholek.CzyJestDrogaWLewo() || wierzcholek.CzyJestDrogaWPrawo()))
                    {
                        WierzcholekChodnika wierzcholekA = (WierzcholekChodnika)wierzcholek.ZwrocKrawedzGorna().ZwrocPrzeciwnyWierzcholek(wierzcholek);
                        WierzcholekChodnika wierzcholekB = (WierzcholekChodnika)wierzcholek.ZwrocKrawedzDolna().ZwrocPrzeciwnyWierzcholek(wierzcholek);

                        Chodniki.Remove(wierzcholek.ZwrocKrawedzGorna().UsunKrawedz());
                        Chodniki.Remove(wierzcholek.ZwrocKrawedzDolna().UsunKrawedz());
                        Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, wierzcholekB));
                    }
                }
            }

            for (int i = WierzcholkiChodnikow.Count - 1; i >= 0; --i)
            {
                if (WierzcholkiChodnikow[i].Krawedzie.Count == 0)
                {
                    WierzcholkiChodnikow.Remove(WierzcholkiChodnikow[i]);
                }
            }
        }
        private void BudujChodnik(Punkt <double> punktA, Punkt <double> punktB)
        {
            WierzcholekChodnika wierzcholekA;

            if (punktA.X == 0)
            {
                wierzcholekA = new WierzcholekChodnika(new Punkt <double>(punktA.X - 0.5, punktA.Y), TypWierzcholkaPieszych.PunktWejscia);
            }
            else if (punktA.Y == 0)
            {
                wierzcholekA = new WierzcholekChodnika(new Punkt <double>(punktA.X, punktA.Y - 0.5), TypWierzcholkaPieszych.PunktWejscia);
            }
            else
            {
                wierzcholekA = new WierzcholekChodnika(punktA, TypWierzcholkaPieszych.ChodnikPrzestrzeni);
            }

            WierzcholekChodnika wierzcholekB;

            if (punktB.X == rozmiarMapyX - 1)
            {
                wierzcholekB = new WierzcholekChodnika(new Punkt <double>(punktB.X + 0.5, punktB.Y), TypWierzcholkaPieszych.PunktWejscia);
            }
            else if (punktB.Y == rozmiarMapyY - 1)
            {
                wierzcholekB = new WierzcholekChodnika(new Punkt <double>(punktB.X, punktB.Y + 0.5), TypWierzcholkaPieszych.PunktWejscia);
            }
            else
            {
                wierzcholekB = new WierzcholekChodnika(punktB, TypWierzcholkaPieszych.ChodnikPrzestrzeni);
            }

            WierzcholkiChodnikow.Add(wierzcholekA);
            WierzcholkiChodnikow.Add(wierzcholekB);
            Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, wierzcholekB));

            ZaznaczNaMapie <TypPrzestrzeni>(Mapa, new Prostokat((Punkt <int>)punktA, (Punkt <int>)punktB), TypPrzestrzeni.Chodnik);
        }
Example #9
0
        /// <summary>
        /// Odwzorowuje chodniki z połączeń drogowych
        /// </summary>
        private void OdwzorujChodnikiZDrog(GeneratorPolaczenSamochodow generatorPolaczen)
        {
            foreach (WierzcholekDrogi wierzcholek in generatorPolaczen.WierzcholkiDrog)
            {
                if (!wierzcholek.CzyJestDrogaWGore() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                          !wierzcholek.CzyJestDrogaWGore()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 - 0.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 - 0.5));
                }
                if (!wierzcholek.CzyJestDrogaWDol() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                         !wierzcholek.CzyJestDrogaWDol()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 + 1.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 + 1.5));
                }
                if (!wierzcholek.CzyJestDrogaWLewo() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                          !wierzcholek.CzyJestDrogaWLewo()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 - 0.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 + 1.5));
                }
                if (!wierzcholek.CzyJestDrogaWPrawo() && !(wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.PunktWejscia &&
                                                           !wierzcholek.CzyJestDrogaWPrawo()))
                {
                    TworzPolaczeniaKopiowanychTras(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 - 0.5),
                                                   new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 + 1.5));
                }

                if (wierzcholek.TypWierzcholka == TypWierzcholkaSamochodow.Pasy)
                {
                    WierzcholekChodnika wierzcholekA = null;
                    WierzcholekChodnika wierzcholekB = null;
                    if (wierzcholek.CzyJestDrogaWDol() && wierzcholek.CzyJestDrogaWGore())
                    {
                        wierzcholekA = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 - 0.5, wierzcholek.Pozycja.Y * 2 + 0.5));
                        wierzcholekB = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 1.5, wierzcholek.Pozycja.Y * 2 + 0.5));

                        wierzcholekA.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekB);
                        wierzcholekB.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekA);
                    }
                    else if (wierzcholek.CzyJestDrogaWPrawo() && wierzcholek.CzyJestDrogaWLewo())
                    {
                        wierzcholekA = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 0.5, wierzcholek.Pozycja.Y * 2 - 0.5));
                        wierzcholekB = DodajLubZnajdzWierzcholek(new Punkt <double>(wierzcholek.Pozycja.X * 2 + 0.5, wierzcholek.Pozycja.Y * 2 + 1.5));

                        wierzcholekA.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekB);
                        wierzcholekB.UstawObiektWejscia(((WejscieNaPasy)wierzcholek.ObiektDrogi).PrzejscieDlaPieszych, wierzcholekA);
                    }

                    wierzcholekA.TypWierzcholka = TypWierzcholkaPieszych.Pasy;
                    wierzcholekB.TypWierzcholka = TypWierzcholkaPieszych.Pasy;

                    KrawedzGrafu krawedzA = SzukajDrogiPomiedzyPunktem(wierzcholekA.Pozycja);
                    LaczTraseWWierzcholku(krawedzA, wierzcholekA);

                    KrawedzGrafu krawedzB = SzukajDrogiPomiedzyPunktem(wierzcholekB.Pozycja);
                    LaczTraseWWierzcholku(krawedzB, wierzcholekB);

                    Chodniki.Add(KrawedzGrafu.StworzDroge(wierzcholekA, wierzcholekB));
                }
            }
        }