private Tuple <Point, Point, double> FindInDeltaField(List <Point> xSeries, List <Point> ySeries, int lIndex) { List <Point> yLine = new List <Point>(); double d1 = xSeries[lIndex].X - _distance; double d2 = xSeries[lIndex].X + _distance; for (int i = 0; i < ySeries.Count; ++i) { if (ySeries[i].X >= d1 && ySeries[i].X <= d2) { yLine.Add(ySeries[i]); } } for (int i = 0; i < yLine.Count; ++i) { Point p1 = yLine[i]; for (int j = i + 1; j < yLine.Count && (j - i) <= 7; ++j) { Point p2 = yLine[j]; double squareDistance = PointsDistances.SquareDistance(p1, p2); if (squareDistance < _distance) { _distance = squareDistance; _point1 = p1; _point2 = p2; } } } return(new Tuple <Point, Point, double>(_point1, _point2, _distance)); }
public FindPairResult Find() { Point[][] l_u = ConvexHull_LU(_points); Point[] lower = l_u[0]; Point[] upper = l_u[1]; int i = 0; int j = lower.Length - 1; List <PointPair> pairs = new List <PointPair>(lower.Length + upper.Length); while (i < upper.Length - 1 || j > 0) { pairs.Add(new PointPair(upper[i], lower[j])); if (i == upper.Length - 1) { j--; } else if (j == 0) { i += 1; } else if ((upper[i + 1].Y - upper[i].Y) * (lower[j].X - lower[j - 1].X) > (lower[j].Y - lower[j - 1].Y) * (upper[i + 1].X - upper[i].X)) { i++; } else { j--; } } double distance = PointsDistances.SquareDistance(pairs[0].Point1, pairs[0].Point2); Point point1 = pairs[0].Point1; Point point2 = pairs[0].Point2; for (int index = 1; index < pairs.Count; ++index) { var pair = pairs[i]; double d = PointsDistances.SquareDistance(pair.Point1, pair.Point2); if (d > distance) { distance = d; point1 = pair.Point1; point2 = pair.Point2; } } return(new FindPairResult(point1, point2)); }
private void SearchClosestInLittleSequrnce(List <Point> xSeries) { double minDistance = double.MaxValue; _point1 = _point2 = default(Point); for (int i = 0; i < xSeries.Count - 1; ++i) { for (int j = i + 1; j < xSeries.Count; ++j) { double distance = PointsDistances.SquareDistance(xSeries[i], xSeries[j]); if (distance < minDistance) { minDistance = distance; _point1 = xSeries[i]; _point2 = xSeries[j]; } } } _distance = minDistance; }
public FindPairResult(Point point1, Point point2) : this() { this.Point1 = point1; this.Point2 = point2; this.Distance = Math.Sqrt(PointsDistances.SquareDistance(point1, point2)); }