IMP
2.0.0
The Integrative Modeling Platform
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
Cone3D.h
Go to the documentation of this file.
1
/**
2
* \file IMP/algebra/Cone3D.h
3
* \brief stores a cone
4
*
5
* Copyright 2007-2013 IMP Inventors. All rights reserved.
6
*/
7
8
#ifndef IMPALGEBRA_CONE_3D_H
9
#define IMPALGEBRA_CONE_3D_H
10
11
#include "
Vector3D.h
"
12
#include "
Sphere3D.h
"
13
#include "
SpherePatch3D.h
"
14
#include "
Plane3D.h
"
15
#include "
Segment3D.h
"
16
#include "
GeometricPrimitiveD.h
"
17
#include <
IMP/base/showable_macros.h
>
18
#include <
IMP/base/warning_macros.h
>
19
#include <iostream>
20
#include "
constants.h
"
21
22
23
IMPALGEBRA_BEGIN_NAMESPACE
24
/**
25
In general, a cone is a pyramid with a circular cross section.
26
A right cone is a cone with its vertex above the center of its base.
27
However, when used without qualification, the term "cone" often means
28
"right cone." We have implemented a "right cone".
29
\geometry
30
*/
31
class
IMPALGEBRAEXPORT
Cone3D
:
public
GeometricPrimitiveD
<3>
32
{
33
public
:
34
Cone3D
(){}
35
// A cone with a top at s.get_point(0) and the given base radius
36
Cone3D
(
const
Segment3D
&s,
double
radius);
37
//!Get the vertex of the cone
38
Vector3D
get_tip
()
const
{
return
seg_.get_point(0);}
39
//!Get the direction of the axis of the cone
40
/** This vector points from the tip into the occupied volume.
41
*/
42
Vector3D
get_direction
()
const
{
return
seg_.get_direction();}
43
double
get_height()
const
{
return
seg_.get_length();}
44
/** The opening angle of a cone is the vertex angle made by a cross section
45
through the apex and center of the base.*/
46
double
get_angle
()
const
{
47
return
2.*std::atan(radius_ / get_height());
48
}
49
//! get the radius of the base circle
50
double
get_radius
()
const
{
return
radius_;}
51
bool
get_contains(
const
Vector3D
&v)
const
;
52
//! Get the plane supporting the base of the cone
53
/** The cone is on the positive side of the plane.
54
*/
55
Plane3D
get_base_plane()
const
;
56
IMP_SHOWABLE_INLINE
(
Cone3D
, out << seg_ <<
": "
<< radius_;);
57
private
:
58
Segment3D
seg_;
59
double
radius_;
60
};
61
62
IMP_VOLUME_GEOMETRY_METHODS
(Cone3D, cone_3d,
63
IMP_UNUSED
(g);
IMP_NOT_IMPLEMENTED
,
64
IMP_UNUSED
(g);
IMP_NOT_IMPLEMENTED
,
65
IMP_UNUSED
(g);
IMP_NOT_IMPLEMENTED
);
66
IMPALGEBRA_END_NAMESPACE
67
68
#endif
/* IMPALGEBRA_CONE_3D_H */