//return index of furthest point from vector v public int FurthestIndex(Vector2F v) { int imax = -1; float dist2max = float.MinValue; for (int i = 0; i < points.Length; i++) { if (dist2max < Vector2F.DistanceSquared(v, points[i])) { dist2max = Vector2F.DistanceSquared(v, points[i]); imax = i; } } return(imax); }
//return index of nearest point to vector v public int NearestIndex(Vector2F v) { int imin = -1; float dist2min = float.MaxValue; for (int i = 0; i < points.Length; i++) { if (dist2min > Vector2F.DistanceSquared(v, points[i])) { dist2min = Vector2F.DistanceSquared(v, points[i]); imin = i; } } return(imin); }
//find closest endpoint to point public void find_closest_endpoint(Vector2F point, int start_idx, out int best_idx, out bool best_reverse) { float best_val = float.MaxValue; best_idx = 0; best_reverse = false; for (int i = start_idx; i < paths.Count; i++) { if (best_val > Vector2F.DistanceSquared(point, paths[i].p.First.Value)) { best_val = Vector2F.DistanceSquared(point, paths[i].p.First.Value); best_idx = i; best_reverse = false; } if (best_val > Vector2F.DistanceSquared(point, paths[i].p.Last.Value)) { best_val = Vector2F.DistanceSquared(point, paths[i].p.Last.Value); best_idx = i; best_reverse = true; } } }