public override void ComputeDistancesFrom( ref Point point, out double minimumResult, out double maximumResult) { minimumResult = double.MaxValue; maximumResult = double.MinValue; Rectangle region = Region; Point topLeft = new Point(region.Left, region.Top); Point topRight = new Point(region.Right, region.Top); Point bottomRight = new Point(region.Right, region.Bottom); Point bottomLeft = new Point(region.Left, region.Bottom); double leftEdge = point.SquaredDistanceTo(topLeft, bottomLeft); double topEdge = point.SquaredDistanceTo(topLeft, topRight); double rightEdge = point.SquaredDistanceTo(topRight, bottomRight); double bottomEdge = point.SquaredDistanceTo(bottomLeft, bottomRight); minimumResult = Math.Min(minimumResult, leftEdge); minimumResult = Math.Min(minimumResult, topEdge); minimumResult = Math.Min(minimumResult, rightEdge); minimumResult = Math.Min(minimumResult, bottomEdge); maximumResult = Math.Max(maximumResult, leftEdge); maximumResult = Math.Max(maximumResult, topEdge); maximumResult = Math.Max(maximumResult, rightEdge); maximumResult = Math.Max(maximumResult, bottomEdge); }
public override void Query(ref Point point, out Sample.Location sample) { sample.Distance = float.MaxValue; FullLine selectedLine = _Lines[0]; if(_Lines.Length > 1) { foreach(FullLine line in _Lines) { Point point1 = line.Point1; Point point2 = line.Point2; float newDistance = point.SquaredDistanceTo(point1, point2); if(newDistance < sample.Distance) { sample.Distance = newDistance; selectedLine = line; } } } sample.Distance = point.DistanceTo( selectedLine.Point1, selectedLine.Point2, out sample.Intersection); }