Вычислить расстояние между областью, окруженной контуром, и определенной точкой во Flutter

Согласно документации для Path:

      Closed sub-paths enclose a (possibly discontiguous) region of the plane based on the current fillType.

Насколько я понимаю, это означает, что когда объект Path закрыт, он окружает двумерную область.

Когда пользователь щелкает точку на экране, я хочу вычислить расстояние между точкой, которую щелкнул пользователь, и областью, окруженной путем. Я понимаю, что пользователь щелкает через GestureDetector / onPanDown, но мне сложно понять, как рассчитать расстояние до пути (или области, окруженной путем). Кажется, что все функции, предлагаемые Path, возвращают void или bool, но не расстояния.

Как рассчитать расстояние?

1 ответ

В первую очередь пройдите через все точки пути. и для каждой точки узнайте расстояние до позиции щелчка и удерживайте самую короткую.

Итак, чтобы получить точки пути, используйте PathMetrics.

      double getShortestDistance(Path path, Offset clickedPoint) {
    PathMetrics pathMetrics = path.computeMetrics();
    
    double minDistance;
    
    pathMetrics.toList().forEach((element) {
      for (var i = 0; i < element.length; i++) {
        Tangent tangent = element.getTangentForOffset(i.toDouble());
        Offset pos = tangent.position;
        
        double distance = getDistance(pos,clickedPoint);
        if(minDistance==null||distance<minDistance) {
          minDistance = distance;
        }
      }
    });

    return minDistance;
  }

  double getDistance(Offset pos, Offset clickedPoint) {
    double dx = pos.dx-clickedPoint.dx;
    double dy = pos.dy-clickedPoint.dy;
    double distance = sqrt(dx+dy);
    return distance.abs();
  }

получил ссылку отсюда

Другие вопросы по тегам