Browse Source

Tune what's considered a duplicate intersection point

Mark Tolmacs 6 months ago
parent
commit
2cf53200ac
2 changed files with 6 additions and 3 deletions
  1. 4 2
      packages/element/src/collision.ts
  2. 2 1
      packages/math/src/point.ts

+ 4 - 2
packages/element/src/collision.ts

@@ -234,7 +234,8 @@ const intersectRectanguloidWithLineSegment = (
       )
       // Remove duplicates
       .filter(
-        (p, idx, points) => points.findIndex((d) => pointsEqual(p, d)) === idx,
+        (p, idx, points) =>
+          points.findIndex((d) => pointsEqual(p, d, 1e-3)) === idx,
       )
   );
 };
@@ -282,7 +283,8 @@ const intersectDiamondWithLineSegment = (
       )
       // Remove duplicates
       .filter(
-        (p, idx, points) => points.findIndex((d) => pointsEqual(p, d)) === idx,
+        (p, idx, points) =>
+          points.findIndex((d) => pointsEqual(p, d, 1e-3)) === idx,
       )
   );
 };

+ 2 - 1
packages/math/src/point.ts

@@ -91,9 +91,10 @@ export function isPoint(p: unknown): p is LocalPoint | GlobalPoint {
 export function pointsEqual<Point extends GlobalPoint | LocalPoint>(
   a: Point,
   b: Point,
+  precision = PRECISION,
 ): boolean {
   const abs = Math.abs;
-  return abs(a[0] - b[0]) < PRECISION && abs(a[1] - b[1]) < PRECISION;
+  return abs(a[0] - b[0]) < precision && abs(a[1] - b[1]) < precision;
 }
 
 /**