00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <InfiniteCone.hpp>
00021 #include <Cone.hpp>
00022
00023 InfiniteCone::
00024 InfiniteCone(const Cone& c)
00025 : Shape(Shape::infiniteCone),
00026 __center1(c.__center1),
00027 __center2(c.__center2),
00028 __axisVector(c.__axisVector),
00029 __height(c.__height),
00030 __radius1(c.__radius1),
00031 __radius2(c.__radius2)
00032 {
00033 this->setTransformationsList(c.transformationsList());
00034 }
00035
00036 InfiniteCone::
00037 InfiniteCone(const InfiniteCone& c)
00038 : Shape(c),
00039 __center1(c.__center1),
00040 __center2(c.__center2),
00041 __axisVector(c.__axisVector),
00042 __height(c.__height),
00043 __radius1(c.__radius1),
00044 __radius2(c.__radius2)
00045 {
00046 ;
00047 }
00048
00049 bool InfiniteCone::
00050 __inShape(const TinyVector<3, real_t>& x) const
00051 {
00052 TinyVector<3,real_t> c1x = x - __center1;
00053 const real_t alpha = __axisVector*c1x / __height;
00054 const real_t h2 = c1x*c1x - alpha*alpha;
00055
00056 return (h2<std::pow(alpha/__height*__radius2 + (1-alpha/__height)*__radius1, 2));
00057 }
00058
00059 ReferenceCounting<Shape> InfiniteCone::
00060 __getCopy() const
00061 {
00062 return new InfiniteCone(*this);
00063 }