00001
00002
00003
00004
00005
00006
00007 #ifndef IMPALGEBRA_CYLINDER_3D_H
00008 #define IMPALGEBRA_CYLINDER_3D_H
00009
00010 #include "Vector3D.h"
00011 #include "Rotation3D.h"
00012 #include "Transformation3D.h"
00013 #include "Segment3D.h"
00014 #include <iostream>
00015 #include <IMP/constants.h>
00016
00017
00018 IMPALGEBRA_BEGIN_NAMESPACE
00019
00020
00021
00022
00023 class IMPALGEBRAEXPORT Cylinder3D {
00024 public:
00025 Cylinder3D(){}
00026 Cylinder3D(const Segment3D &s, double radius);
00027 double get_radius() const {return radius_;}
00028 const Segment3D& get_segment() const {
00029 return s_;
00030 }
00031 IMP_SHOWABLE_INLINE({out << s_ << ": " << radius_;});
00032
00033 private:
00034 Segment3D s_;
00035 double radius_;
00036 };
00037
00038 IMP_VOLUME_GEOMETRY_METHODS(Cylinder3D,
00039 return 2.0*PI*g.get_radius()
00040 * g.get_segment().get_length()
00041 + 2.0*PI *square(g.get_radius()),
00042 return PI *square(g.get_radius())
00043 * g.get_segment().get_length(),
00044 IMP_NOT_IMPLEMENTED);
00045
00046 IMPALGEBRA_END_NAMESPACE
00047
00048 #endif