One way to determine if a point is inside a triangle is by computing barycentric coordinates:
function vector(from, to) {
return [to[0] - from[0], to[1] - from[1]];
}
function dotProduct(u, v) {
return u[0] * v[0] + u[1] * v[1];
}
function isPointInTriangle(p, a, b, c) {
const v0 = vector(a, c);
const v1 = vector(a, b);
const v2 = vector(a, p);
const dot00 = dotProduct(v0, v0);
const dot01 = dotProduct(v0, v1);
const dot02 = dotProduct(v0, v2);
const dot11 = dotProduct(v1, v1);
const dot12 = dotProduct(v1, v2);
// Compute barycentric coordinates.
const invDenom = 1.0 / (dot00 * dot11 - dot01 * dot01);
const u = (dot11 * dot02 - dot01 * dot12) * invDenom;
const v = (dot00 * dot12 - dot01 * dot02) * invDenom;
// Check if point is in triangle.
return (u >= 0) && (v >= 0) && (u + v < 1);
}