Path.computeMetrics
获得)执行二分查找并通过Path.getTangentForOffset
找到偏移量。const searchDx = 75;
const iterations = 12;
final pathMetric = path.computeMetrics().first;
final pathDistance = pathMetric.length;
late Offset closestOffset;
var closestDistance = pathDistance / 2;
for (var n = 1; n <= iterations; n++) {
closestOffset = pathMetric.getTangentForOffset(closestDistance)!.position;
if (closestOffset.dx == searchDx) break;
final change = pathDistance / pow(2, n);
if (closestOffset.dx < searchDx) {
closestDistance += change;
} else {
closestDistance -= change;
}
}
print(closestOffset); // Offset(75.0, 193.9)
final change = pathDistance / pow(2, n);
替换为一种更便宜的操作,例如存储当前搜索区间的左右点。
您可以在Dartpad上的示例中找到完整的可运行代码。