Vector3D.barycenter constructor

Vector3D.barycenter(
  1. Vector3D p,
  2. Vector3D a,
  3. Vector3D b,
  4. Vector3D c,
)

Implementation

factory Vector3D.barycenter(Vector3D p, Vector3D a, Vector3D b, Vector3D c) {
  final v0 = b.sub(a);
  final v1 = c.sub(a);
  final v2 = p.sub(a);
  final d00 = v0.dotProduct(v0);
  final d01 = v0.dotProduct(v1);
  final d11 = v1.dotProduct(v1);
  final d20 = v2.dotProduct(v0);
  final d21 = v2.dotProduct(v1);
  final denom = d00*d11 - d01*d01;
  final y = (d11*d20 - d01*d21)/denom;
  final z = (d00*d21 - d01*d20)/denom;
  final x = 1.0 - (z + y);
  return .vec3(x, y, z);
}