Вычислить расстояние между областью, окруженной контуром, и определенной точкой во 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();
}
получил ссылку отсюда