示例#1
0
        private double BerekenLengte()
        {
            //Dit doen we door de afstanden tussen de vertices van elk van de segmenten te berekenen
            double totaleLengte = 0;

            Graaf graaf = this.Graaf;
            var   map   = graaf.Map;

            //In een graaf komen meerdere keren hetzelfde segment voor, dus hou ik een lijst bij met de segmentID's van reeds berekende segmenten
            List <int> berekendeSegmentIDs = new List <int>();

            foreach (KeyValuePair <Knoop, List <Segment> > knoop in map)
            {
                foreach (Segment segment in knoop.Value)
                {
                    if (!berekendeSegmentIDs.Contains(segment.SegmentID))
                    {
                        List <Punt> vertices = segment.Vertices;
                        for (int i = 1; i < vertices.Count; i++)
                        {
                            Punt eerstePunt = vertices[i - 1];
                            Punt tweedePunt = vertices[i];


                            double lengte = Math.Sqrt(Math.Pow(Math.Abs(eerstePunt.X - tweedePunt.X), 2) + Math.Pow(Math.Abs(eerstePunt.Y - tweedePunt.Y), 2));

                            totaleLengte += lengte;
                        }
                        berekendeSegmentIDs.Add(segment.SegmentID);
                    }
                }
            }
            return(Math.Round(totaleLengte, 4));
        }
        public static Dictionary <int, List <Segment> > LeesSegmenten(string path)
        {
            Dictionary <int, List <Segment> > straatIDSegmentlijst = new Dictionary <int, List <Segment> >();

            using (StreamReader sr = File.OpenText(path))
            {
                string input = null;
                sr.ReadLine();
                while ((input = sr.ReadLine()) != null)
                {
                    string[] inputs = input.Split(';');

                    if (!(int.Parse(inputs[6]) == -9 && int.Parse(inputs[7]) == -9))
                    {
                        int         segmentID                  = int.Parse(inputs[0]);
                        List <Punt> vertices                   = new List <Punt>();
                        string      stringMetPunten            = inputs[1].Remove(0, 12); //Punten zoeken, deze moeten in de List<punt> vetrices van het segment komen.
                        string      stringMetPuntenZonderHaken = stringMetPunten.Trim('(', ')', ' ');
                        string[]    xys = stringMetPuntenZonderHaken.Split(',');
                        foreach (string xy in xys)
                        {
                            string   xyTrimmed = xy.Trim(' ');
                            string[] xeny      = xyTrimmed.Split(' ');

                            Punt punt = new Punt(double.Parse(xeny[0].Trim('(')), double.Parse(xeny[1]));
                            vertices.Add(punt);
                        }

                        Knoop beginknoop = new Knoop(int.Parse(inputs[4]), vertices[0]);                        //Eerste punt van de vertices is de beginknoop, laatste punt is de eindknoop!
                        Knoop eindknoop  = new Knoop(int.Parse(inputs[5]), vertices[vertices.Count - 1]);

                        Segment segment = new Segment(segmentID, beginknoop, eindknoop, vertices);


                        // segmenten toevoegen aan een dictionary die de straatID en segmenten bij die straat bijhoudt

                        int straatID = int.Parse(inputs[6]);
                        if (!(straatID == -9))
                        {
                            if (straatIDSegmentlijst.ContainsKey(straatID))                                     //als er al een record in de dictionary zit voor de straat
                            {
                                straatIDSegmentlijst[straatID].Add(segment);
                            }
                            else                                                                                //anders nieuwe record toevoegen en segment aan die lijst toevoegen
                            {
                                straatIDSegmentlijst.Add(straatID, new List <Segment>());
                                straatIDSegmentlijst[straatID].Add(segment);
                            }
                        }

                        int straatID2 = int.Parse(inputs[7]);
                        if (!(straatID2 == -9) && (straatID2 != straatID))
                        {
                            if (straatIDSegmentlijst.ContainsKey(straatID2))                                     //als er al een record in de dictionary zit voor de straat
                            {
                                straatIDSegmentlijst[straatID2].Add(segment);
                            }
                            else
                            {
                                straatIDSegmentlijst.Add(straatID2, new List <Segment>());                   //Nieuwe record in dictionary toevoegen
                                straatIDSegmentlijst[straatID2].Add(segment);
                            }
                        }
                    }
                }
            }
            return(straatIDSegmentlijst);
        }
示例#3
0
 public Knoop(int knoopID, Punt punt)
 {
     Punt    = punt;
     KnoopID = knoopID;
 }