Exemplo n.º 1
0
        /// <summary>
        /// Az átadott RouteCalculate osztály (ennek kell tartalmaznia a kezdőpontot, célpontot,
        /// a kezdőszintet és a célszintet) és
        /// a megadott szint mátrixa annak alapján, és az összes létező pont alapján
        /// meghívja a legrövidebb útvonalat számoló dijkstraPath() metódust
        /// </summary>
        /// <param name="routeCalculate">a számolandó útvonal (tartalmazza a kezdőpontot, a célpontot,
        /// a kezdőszintet és a célszintet)</param>
        /// <param name="arrayA">a szint pontjai</param>
        /// <param name="szomszMatrixA">a szint pontjainak szomszédossági mátrixa</param>
        /// <returns></returns>
        public static List <RouteSection> calculateRoute(RouteCalculate routeCalculate,
                                                         List <PointF> arrayA,
                                                         float[,] szomszMatrixA)
        {
            int StartIndex = arrayA.IndexOf(routeCalculate.StartPoint);
            int EndIndex   = arrayA.IndexOf(routeCalculate.EndPoint);

            string str = ""; int L = 0;
            List <RouteSection> finalList;

            finalList =
                MiniDistanceAndPath.dijkstraPath(szomszMatrixA, StartIndex, EndIndex, arrayA, str, L);

            return(finalList);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Az átadott RouteCalculate osztály (ennek kell tartalmaznia a kezdőpontot, célpontot,
        /// a kezdőszintet és a célszintet) és
        /// két megadott szint mátrixa annak alapján, és az összes létező pont alapján
        /// illetve a megadott kiemelt pontok, úgy mint a liftek és a lépcsők koordinátái (szintén PointF)
        /// alapján meghatározza, hogy egy vagy több szint között kell mozogni és
        /// meghívja a legrövidebb útvonalat számoló dijkstraPath() metódust
        /// </summary>
        /// <param name="routeCalculate">a számolandó útvonal (tartalmazza a kezdőpontot, a célpontot,
        /// a kezdőszintet és a célszintet)</param>
        /// <param name="arrayA">1. szint pontjai</param>
        /// <param name="szomszMatrixA">1. szint pontjainak szomszédossági mátrixa</param>
        /// <param name="arrayB">2. szint pontjai</param>
        /// <param name="szomszMatrixB">2. szint pontjainak szomszédossági mátrixa</param>
        /// <param name="liftPoint">a liftet meghatórozó PointF</param>
        /// <param name="stairsPoint">a lépcsőt meghatározó PointF</param>
        /// <param name="L">a két szint közötti különbség</param>
        /// <returns>a legrövidebb utat definiáló szakasz-lista</returns>
        public static List <RouteSection> calculateRoute(RouteCalculate routeCalculate,
                                                         List <PointF> arrayA,
                                                         float[,] szomszMatrixA,
                                                         List <PointF> arrayB,
                                                         float[,] szomszMatrixB,
                                                         PointF liftPoint,
                                                         PointF stairsPoint,
                                                         int L)
        {
            if (routeCalculate.StartLevel == 2)
            {
                arrayA        = arrayB;
                szomszMatrixA = szomszMatrixB;
            }

            if (routeCalculate.EndLevel == 1)
            {
                arrayB        = arrayA;
                szomszMatrixB = szomszMatrixA;
            }

            int StartIndex = arrayA.IndexOf(routeCalculate.StartPoint);
            int EndIndex   = arrayA.IndexOf(routeCalculate.EndPoint);

            string str = "";
            List <RouteSection> finalList;

            if (routeCalculate.StartLevel != routeCalculate.EndLevel)
            {
                int LiftIndex   = arrayA.IndexOf(liftPoint);
                int StairsIndex = arrayA.IndexOf(stairsPoint);

                float a = MiniDistanceAndPath.dijkstraDistance(szomszMatrixA, StartIndex, LiftIndex);
                float b = MiniDistanceAndPath.dijkstraDistance(szomszMatrixB, LiftIndex, EndIndex);

                float c = MiniDistanceAndPath.dijkstraDistance(szomszMatrixA, StartIndex, StairsIndex);
                float d = MiniDistanceAndPath.dijkstraDistance(szomszMatrixB, StairsIndex, EndIndex);

                if (a + b < c + d)
                {
                    str       = "lifttel";
                    finalList =
                        MiniDistanceAndPath.dijkstraPath(szomszMatrixA, StartIndex, LiftIndex, arrayA, str, L);
                    int j = finalList.Count;
                    str = "";
                    List <RouteSection> finalListLevel2 =
                        MiniDistanceAndPath.dijkstraPath(szomszMatrixB, LiftIndex, EndIndex, arrayB, str, L);
                    for (int i = 0; i < finalListLevel2.Count; i++)
                    {
                        finalListLevel2[i].setOrder(j + finalListLevel2[i].Order);
                        finalList.Add(finalListLevel2[i]);
                    }
                }
                else
                {
                    str       = "lépcsőn";
                    finalList =
                        MiniDistanceAndPath.dijkstraPath(szomszMatrixA, StartIndex, StairsIndex, arrayA, str, L);
                    int j = finalList.Count;
                    str = "";
                    List <RouteSection> finalListLevel2 =
                        MiniDistanceAndPath.dijkstraPath(szomszMatrixB, StairsIndex, EndIndex, arrayB, str, L);
                    for (int i = 0; i < finalListLevel2.Count; i++)
                    {
                        finalListLevel2[i].setOrder(j + finalListLevel2[i].Order);
                        finalList.Add(finalListLevel2[i]);
                    }
                }
            }
            else
            {
                finalList =
                    MiniDistanceAndPath.dijkstraPath(szomszMatrixA, StartIndex, EndIndex, arrayA, str, L);
            }

            return(finalList);
        }