public static bool Overlap(TreeNode nd1, TreeNode nd2) { if (RRT.DistanceOf2PointsSquared(nd1.Position, nd2.Position) <= 4) { return(true); } return(false); }
public TreeEdge AddNeighbour(TreeNode neighbour) { foreach (TreeEdge node in adjacentEdges) { if (node.Destination.GetID == this.index) { return(null); } } TreeEdge edge = new TreeEdge(this, neighbour, RRT.DistanceOf2PointsSquared(this.position, neighbour.position)); adjacentEdges.AddFirst(edge); return(edge); }
public bool MergeWith(RRT extTree, int numberOfAttempts) { RRT tree1 = this; RRT tree2 = extTree; TreeNode newnode1 = tree2.root; for (int i = 0; i < numberOfAttempts; i++) { TreeNode rand = new TreeNode(TreeNode.RandomConfigPiont(maxHeight, maxWidth, 1)); newnode1 = tree1.ExtendTreeRand(rand, 10); if (newnode1 != null) { TreeNode newnode2 = tree2.ExtendTree(newnode1, 10); if (newnode2 != null) { if (TreeNode.Overlap(newnode1, newnode2)) { foreach (TreeEdge edge in extTree.treeEdges) { this.treeEdges.AddFirst(edge); } foreach (TreeNode tn in extTree.treeNodes) { this.treeNodes.AddFirst(tn); } Form1.showMessage("Merged"); return(true); } } RRT tmp = tree1; tree1 = tree2; tree2 = tmp; } } Form1.showMessage("Failed"); return(false); }
private void btnDrawPath_Click(object sender, EventArgs e) { Graphics g = this.CreateGraphics(); Pen myPen = new Pen(Brushes.Cyan, 2); RRT rrt1 = new RRT(5, validLocations, 600, 800, primaryPoint, secondaryPoint); RRT rrt2 = new RRT(5, validLocations, 600, 800, secondaryPoint, primaryPoint); //Stopwatch timer = new Stopwatch(); DateTime dt = DateTime.Now; //timer.Start(); bool merged = rrt1.MergeWith(rrt2, 100); ///timer.Stop(); MessageBox.Show(string.Format("merged: {0} time: {1}", merged, DateTime.Now.Subtract(dt).TotalMilliseconds));//timer.Elapsed.TotalMilliseconds)); foreach (TreeEdge te in rrt1.Edges) { g.DrawLine(myPen, te.Source.Position, te.Destination.Position); } foreach (TreeNode tn in rrt1.Nodes) { DrawCrossHair(g, tn.Position, 4, Pens.Green); } MessageBox.Show(string.Format("{0} {1}", rrt1.Edges.Count, rrt1.Nodes.Count)); myPen = new Pen(Brushes.Orange, 2); myPen.Color = Color.Red; DrawCrossHair(g, primaryPoint, 10, myPen); myPen.Color = Color.Yellow; DrawCrossHair(g, secondaryPoint, 10, myPen); if (!merged) { foreach (TreeEdge te in rrt2.Edges) { g.DrawLine(myPen, te.Source.Position, te.Destination.Position); } foreach (TreeNode tn in rrt2.Nodes) { DrawCrossHair(g, tn.Position, 4, Pens.Violet); } } // LinkedList<TreeEdge> path = rrt1.CalcAndGetPath(); // foreach (TreeEdge te in path) // { // g.DrawLine(myPen, te.Source.Position, te.Destination.Position); // } /* * int primaryIndex = getIndexOfPoint(primaryPoint, PointsArray); * * routePoints = Dijkestra.dijkestra(primaryIndex, PointsArray.Length, AdjacencyMatrix); * * * int destIndex = getIndexOfPoint(secondaryPoint,PointsArray); * int startIndex = getIndexOfPoint(primaryPoint, PointsArray); * * Pen penTmp = new Pen(Brushes.Red,4); * DrawCrossHair(g, PointsArray[destIndex], 10, penTmp); * * penTmp.Color = Color.Yellow; * DrawCrossHair(g, PointsArray[startIndex], 10, penTmp); * * * int routePointsCount = 0; * * int index = destIndex; * while (true) * { * g.DrawLine(myPen, PointsArray[index], PointsArray[routePoints[index]]); * index = routePoints[index]; * * * * if (index == startIndex) * { * g.DrawLine(myPen, PointsArray[index], PointsArray[routePoints[index]]); * break; * } * routePointsCount++; * } * */ //MessageBox.Show(routePointsCount.ToString()); }