perpendicularDistance function

double perpendicularDistance(
  1. MapEntry<DateTime, double> point,
  2. MapEntry<DateTime, double> lineStart,
  3. MapEntry<DateTime, double> lineEnd,
  4. int totalPoints,
)

Calculate perpendicular distance from point to line segment.

Implementation

double perpendicularDistance(
  MapEntry<DateTime, double> point,
  MapEntry<DateTime, double> lineStart,
  MapEntry<DateTime, double> lineEnd,
  int totalPoints,
) {
  // Normalize time to 0-1 range for distance calculation.
  final x0 = point.key.millisecondsSinceEpoch.toDouble();
  final y0 = point.value;

  final x1 = lineStart.key.millisecondsSinceEpoch.toDouble();
  final y1 = lineStart.value;

  final x2 = lineEnd.key.millisecondsSinceEpoch.toDouble();
  final y2 = lineEnd.value;

  // Calculate perpendicular distance.
  final dx = x2 - x1;
  final dy = y2 - y1;
  final numerator = ((dy * (x0 - x1)) - (dx * (y0 - y1))).abs();
  final denominator = sqrt(dx * dx + dy * dy);

  return denominator != 0 ? numerator / denominator : 0;
}