81 T& u, T& v, T& t,
const T& tMin = T())
83 typedef typename Parallelogram3D<T>::TVector TVector;
84 typedef typename Parallelogram3D<T>::TValue TValue;
85 typedef typename Parallelogram3D<T>::TNumTraits TNumTraits;
86 typedef num::Consistent<T> TConsistent;
88 const TVector pvec = cross(ray.
direction(), parallelogram.sizeV());
90 const TValue det = dot(pvec, parallelogram.sizeU());
91 if (det == TNumTraits::zero)
97 const TVector tvec = ray.
support() - parallelogram.support();
98 const TValue uCandidate = dot(tvec, pvec) * invDet;
99 if (uCandidate < TNumTraits::zero || uCandidate > TNumTraits::one)
104 const TVector qvec = cross(tvec, parallelogram.sizeU());
105 const TValue vCandidate = dot(ray.
direction(), qvec) * invDet;
106 if (vCandidate < TNumTraits::zero || vCandidate > TNumTraits::one)
111 const TConsistent tCandidate = dot(parallelogram.sizeV(), qvec) * invDet;
112 if (tCandidate <= tMin)
119 t = tCandidate.value();
Result intersect(const Parallelogram3D< T > ¶llelogram, const Ray3D< T, NP, PP > &ray, T &u, T &v, T &t, const T &tMin=T())
Find the intersection of a ray and a parallelogram by their parameter t on the ray and it's coordinat...
Result intersect(const Parallelogram3D< T > ¶llelogram, const Ray3D< T, NP, PP > &ray, T &t, const T &tMin=T())
Find the intersection of a ray and a parallelogram by their parameter t on the ray.