21 {{0, 1, 5, 4},
false},
22 {{1, 2, 6, 5},
false},
23 {{2, 3, 7, 6},
false},
24 {{3, 0, 4, 7},
false},
25 {{4, 5, 6, 7},
true}},
28 FormFactorAnisoPyramid::FormFactorAnisoPyramid(
const std::vector<double> P)
31 "frsutum with rectangular base",
32 {{
"Length",
"nm",
"side length of base in x direction", 0, +INF, 0},
33 {
"Width",
"nm",
"side length of base in y direction", 0, +INF, 0},
34 {
"Height",
"nm",
"height", 0, +INF, 0},
35 {
"Alpha",
"rad",
"angle between base and any side face", 0., M_PI_2, 0}}},
37 m_length(m_P[0]), m_width(m_P[1]), m_height(m_P[2]), m_alpha(m_P[3])
42 FormFactorAnisoPyramid::FormFactorAnisoPyramid(
double length,
double width,
double height,
54 m_height - effects.dz_bottom - effects.dz_top, m_alpha);
55 return createTransformedFormFactor(slicedff, rot, effects.position);
61 if (!std::isfinite(cot_alpha) || cot_alpha < 0)
63 double r = cot_alpha * 2 * m_height / m_length;
64 double s = cot_alpha * 2 * m_height / m_width;
66 std::ostringstream ostr;
67 ostr <<
"FormFactorAnisoPyramid() -> Error in class initialization with parameters";
68 ostr <<
" length:" << m_length;
69 ostr <<
" width:" << m_width;
70 ostr <<
" height:" << m_height;
71 ostr <<
" alpha[rad]:" << m_alpha <<
"\n\n";
72 ostr <<
"Check for '2*height <= (length,width)*tan(alpha)' failed.";
76 double D = m_length / 2;
77 double d = m_length / 2 * (1 - r);
78 double W = m_width / 2;
79 double w = m_width / 2 * (1 - s);
82 m_height * (.5 - (r + s) / 3 + r * s / 4) / (1 - (r + s) / 2 + r * s / 3);
91 {-d, -w, m_height - zcom},
92 {d, -w, m_height - zcom},
93 {d, w, m_height - zcom},
94 {-d, w, m_height - zcom}});
Defines many exception classes in namespace Exceptionss.
Defines M_PI and some more mathematical constants.
Defines namespace MathFunctions.
Pure virtual interface for rotations.
For internal use in IFormFactorPolyhedron.
Class that contains upper and lower limits of the z-coordinate for the slicing of form factors.
double cot(double x)
cotangent function: