// Variations of Cylinder3D
template <class scalarT> class Cylinder3D;
typedef Cylinder3D<int> iCylinder3D;
typedef Cylinder3D<float> fCylinder3D;
typedef Cylinder3D<double> dCylinder3D;
typedef Cylinder3D<unsigned char> bCylinder4D;
///////////////////////////////////////////////////////////////////////////////
// Cylinder3D
// - Cylindrical coordinate in 3D space
///////////////////////////////////////////////////////////////////////////////
template <class scalarT>
class Cylinder3D
{
private:
typedef Cylinder3D<scalarT> self; // Shortcut type to simplify declarations
public:
scalarT r,theta,z; // Radius, Rotation angle in radians, Z-distance
// Constructors
inline Cylinder3D() ; // Notice there is no "default" value of zero
inline Cylinder3D(scalarT _r, scalarT _t, scalarT _z)
inline Cylinder3D(const self &v)
// This is a shortcut for assignment that "looks" like a constructor
inline void operator ()(scalarT _r, scalarT _t, scalarT _z)
// Set the values in degrees
inline void setDegrees(scalarT _r, scalarT _t, scalarT _z)
// Function to return Vector3D
inline Vector3D<scalar> getfVector3D() const
// Extractor to return Vector3D
inline operator Vector3D<scalarT> () const
};