0

根据路径的文档:

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

据我了解,这意味着当Path对象关闭时,它会围绕一个二维区域。

当用户单击屏幕上的某个点时,我想计算用户单击的点与路径包围的区域之间的距离。我得到了用户通过 GestureDetector/onPanDown 点击的观点,但我无法弄清楚如何计算到路径的距离(或路径包围的区域)。Path 提供的所有函数似乎都返回 void 或 bool 但没有距离。

想象一下:(当我将它绘制到屏幕上时,红色是 Path 对象,X 应该是我的用户单击的位置;绿线表示的两者之间的距离是我感兴趣的) 在此处输入图像描述

如何计算距离?

4

1 回答 1

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*dx+dy*dy);
    return distance.abs();
  }

这里得到参考

于 2021-04-22T19:46:52.213 回答