112typename Disk3D<T>::TConstReference
113Disk3D<T>::radius()
const
121typename Disk3D<T>::TReference
132const typename Disk3D<T>::TValue
135 return TNumTraits::pi *
num::sqr(radius_);
143const typename Disk3D<T>::TPlane&
152const typename Disk3D<T>::TPoint
153Disk3D<T>::point(TParam u, TParam v)
const
155 const TValue theta = 2 * TNumTraits::pi * v;
156 return plane_.support() + (u * radius_) * (num::cos(theta) * plane_.directionU() + num::sin(theta) * plane_.directionV());
161template <
typename T>
inline
162const typename Disk3D<T>::TPoint
163Disk3D<T>::point(
const TUV& uv)
const
165 return point(uv.x, uv.y);
171const typename Disk3D<T>::TUV
172Disk3D<T>::uv(
const TPoint& point)
const
174 const TVector relative = point - plane_.support();
175 const TValue x = dot(relative, plane_.reciprocalU());
176 const TValue y = dot(relative, plane_.reciprocalU());
177 const TValue u = relative.norm() / radius_;
178 TValue v = num::atan2(y, x) / (2 * TNumTraits::pi);
183 return TUV(u, v < 0 ? TNumTraits::one - v : v);
193 return plane_.isValid() && radius_ >= TNumTraits::zero;