Я читаю эту статью: https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf Я понимаю, почему u, v должно быть больше нуля, поэтому точка лежит внутри треугольника, но я запутался, почему они проверяют * u> det, а также * u +* v> дет. Я думал, что u, v должно быть в [0, 1]. Буду признателен, если кто-нибудь объяснит.
int intersect_triangle(Eigen::Vector3f orig, Eigen::Vector3f dir,
Eigen::Vector3f vert0, Eigen::Vector3f vert1, Eigen::Vector3f vert2,
double* t, double* u, double* v) {
Eigen::Vector3f edge1, edge2, tvec, pvec, qvec;
double det, inv_det;
edge1 = vert1 - vert0;
edge2 = vert2 - vert0;
// begin calculating determinant
pvec = dir.cross(edge2);
det = edge1.dot(pvec);
if (det < EPSILON)
return 0;
// calculate distance from vert0 to ray origin
tvec = orig - vert0;
// now calculate u parameter and test bounds
*u = tvec.dot(pvec); // following the rules of determinants
if (*u < 0.0 || *u > det)
return 0;
qvec = tvec.cross(edge1);
*v = dir.dot(qvec);
if (*v < 0.0 || *u + *v > det)
return 0; // ... code continues