public bool Intersect() { float t = 0, u = 0, v = 0; Vector3 ray_direction = new Vector3(0, -1, 0); Vector3 edge1 = four[1] - four[0]; Vector3 edge2 = four[2] - four[0]; Vector3 tvec, pvec, qvec; float det, inv_det; pvec = Vector3.Cross(ray_direction, edge2); det = Vector3.Dot(edge1, pvec); inv_det = 1.0f / det; tvec = posi - four[0]; u = Vector3.Dot(tvec, pvec) * inv_det; if (u < -0.001f || u > 1.001f) return false; qvec = Vector3.Cross(tvec, edge1); v = Vector3.Dot(ray_direction, qvec) * inv_det; if (v < -0.001f || u + v > 1.001f) return false; t = Vector3.Dot(edge2, qvec) * inv_det; if (t <= 0) return false; return true; }