private EdgeDistance Nearest(List <EdgeDistance> edgeDistances) { EdgeDistance nearest = null; foreach (var edgeDistance in edgeDistances) { if (nearest == null || edgeDistance.Distance < nearest.Distance) { nearest = edgeDistance; } } return(nearest); }
private EdgeDistance Furthest(List <EdgeDistance> edgeDistances) { EdgeDistance furthest = null; foreach (var edgeDistance in edgeDistances) { if (furthest == null || edgeDistance.Distance > furthest.Distance) { furthest = edgeDistance; } } return(furthest); }
protected virtual EdgeDistance GetEdgeToSplit(Node node, List <EdgeDistance> edges) { EdgeDistance toSplit = null; var shortestAddedDistance = double.MaxValue; foreach (var edge in edges) { var a = Calculator.Distance(node, edge.NodeA); var b = Calculator.Distance(node, edge.NodeB); var addedDistance = (a + b) - edge.Distance; if (addedDistance < shortestAddedDistance) { toSplit = edge; shortestAddedDistance = addedDistance; } } return(toSplit); }
protected virtual EdgeDistance GetFirstEdge(WorkingSet workingSet) { var nodes = workingSet.NodesNotInGraph.ToArray(); var count = nodes.Length; EdgeDistance furthestNodes = null; for (int i = 0; i < count; i++) { var from = nodes[i]; for (int j = i + 1; j < count; j++) { var to = nodes[j]; var distance = Calculator.Distance(from, to); if (furthestNodes == null || distance > furthestNodes.Distance) { furthestNodes = new EdgeDistance(from, to, distance); } } } return(furthestNodes); }
public void SplitEdge(Node node, EdgeDistance edgeToSplit) { CurrentWalk.Remove(edgeToSplit); AddToWalk(new EdgeDistance(node, edgeToSplit.NodeA)); AddToWalk(new EdgeDistance(node, edgeToSplit.NodeB)); }
public void AddToWalk(EdgeDistance edge) { CurrentWalk.Add(edge); MoveNodeToWalk(edge.NodeA); MoveNodeToWalk(edge.NodeB); }