function findTriangleEdge(m) {
let t = 0,
e,
triangle,
f,
steps = [],
_seen = {},
lastpoint = -1;
m = cartesian(m);
do {
triangle = delaunay.triangles[t];
let e = -1;
for (let i = 0; i < 3; i++) {
if (triangle[i] !== lastpoint) {
f = [triangle[i], triangle[(i + 1) % 3]];
if (excess([m, cartesian(points[f[1]]), cartesian(points[f[0]])]) > 0) {
e = i;
break;
}
}
}
if (e > -1) {
lastpoint = triangle[(e + 1) % 3];
t = (neighbors[3 * t + e] / 3) | 0;
} else t = -1;
steps.push({ t, e, triangle, f });
} while (
t > -1 &&
!_seen[t] &&
(_seen[t] = true) &&
steps.length < delaunay.triangles.length
);
triangle.steps = steps;
if (t === -1) return triangle;
}