distanceFromPointToLine static method

double distanceFromPointToLine(
  1. Offset point,
  2. Offset lineStart,
  3. Offset lineEnd
)

计算点到线段的距离

Implementation

static double distanceFromPointToLine(
    Offset point, Offset lineStart, Offset lineEnd) {
  final a = point.dx - lineStart.dx;
  final b = point.dy - lineStart.dy;
  final c = lineEnd.dx - lineStart.dx;
  final d = lineEnd.dy - lineStart.dy;

  final dot = a * c + b * d;
  final lenSq = c * c + d * d;

  if (lenSq == 0) return DrawingTool.distanceBetweenPoints(point, lineStart);

  final param = dot / lenSq;

  Offset projection;
  if (param < 0) {
    projection = lineStart;
  } else if (param > 1) {
    projection = lineEnd;
  } else {
    projection = Offset(lineStart.dx + param * c, lineStart.dy + param * d);
  }

  return DrawingTool.distanceBetweenPoints(point, projection);
}