1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| public static bool IsInTriangle(this Vector3 v, Vector3 A, Vector3 B, Vector3 C)
{
return
ArePQOnSameSideInRespectToAB(v, A, B, C) &&
ArePQOnSameSideInRespectToAB(v, B, A, C) &&
ArePQOnSameSideInRespectToAB(v, C, A, B);
}
static bool ArePQOnSameSideInRespectToAB(Vector3 P, Vector3 Q, Vector3 A, Vector3 B)
{
var AB = B - A;
var AP = P - A;
var AQ = Q - A;
AB.Normalize();
AP.Normalize();
AQ.Normalize();
var cross1 = Vector3.Cross(AB, AP);
if (cross1.IsEpsilon()) return false; // Si P est placé sur AB, on considère que les deux points ne sont pas du même côté
var cross2 = Vector3.Cross(AB, AQ);
if (cross2.IsEpsilon()) return false; // Si Q est placé sur AB, on considère que les deux points ne sont pas du même côté
return Vector3.Dot(cross1, cross2) > 0;
} |
Partager