Skip to content

Instantly share code, notes, and snippets.

@creativecreatorormaybenot
Last active September 9, 2022 04:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save creativecreatorormaybenot/35ecfe134a5197ec7f727a9957a13b3c to your computer and use it in GitHub Desktop.
Save creativecreatorormaybenot/35ecfe134a5197ec7f727a9957a13b3c to your computer and use it in GitHub Desktop.
Binary search for point on path (https://stackoverflow.com/q/72764799/6509751)
import 'dart:math';
import 'dart:ui';
void main() {
final path = Path();
path.moveTo(0, 200);
path.lineTo(10, 210);
path.lineTo(30, 190);
path.lineTo(55, 150);
path.lineTo(80, 205);
path.lineTo(100, 0);
const searchDx = 75;
const iterations = 20;
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);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment