public static bool ArePointsOnOppositeSidesOfPlane(ref Vector3 o, ref Vector3 p, ref Vector3 a, ref Vector3 b, ref Vector3 c)
{
Vector3 ab, ac, ap, ao;
Vector3.Subtract(ref b, ref a, out ab);
Vector3.Subtract(ref c, ref a, out ac);
Vector3.Subtract(ref p, ref a, out ap);
Vector3.Subtract(ref o, ref a, out ao);
Vector3 q;
Vector3.Cross(ref ab, ref ac, out q);
float signp;
Vector3.Dot(ref ap, ref q, out signp);
float signo;
Vector3.Dot(ref ao, ref q, out signo);
if (signp * signo <= 0)
return true;
return false;
}