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); }
public Knoop(int knoopID, Punt punt) { Punt = punt; KnoopID = knoopID; }