pointInTri function

bool pointInTri(
  1. Offset p,
  2. Offset a,
  3. Offset b,
  4. Offset c,
)

Checks if point p is inside the triangle defined by a, b, c.

Implementation

@pragma('vm:prefer-inline')
bool pointInTri(Offset p, Offset a, Offset b, Offset c) {
  final v0 = c - a, v1 = b - a, v2 = p - a;
  final d00 = v0.dx * v0.dx + v0.dy * v0.dy;
  final d01 = v0.dx * v1.dx + v0.dy * v1.dy;
  final d11 = v1.dx * v1.dx + v1.dy * v1.dy;
  final d20 = v2.dx * v0.dx + v2.dy * v0.dy;
  final d21 = v2.dx * v1.dx + v2.dy * v1.dy;
  final denom = d00 * d11 - d01 * d01;
  if (denom.abs() < 1e-6) return false;
  final v = (d11 * d20 - d01 * d21) / denom;
  final w = (d00 * d21 - d01 * d20) / denom;
  final u = 1 - v - w;
  return u >= 0 && v >= 0 && w >= 0;
}