1
/////////////////////////////////////////////////////////////
3
// Copyright (c) 2007-2011 by The University of Queensland //
4
// Earth Systems Science Computational Centre (ESSCC) //
5
// http://www.uq.edu.au/esscc //
7
// Primary Business: Brisbane, Queensland, Australia //
8
// Licensed under the Open Software License version 3.0 //
9
// http://www.opensource.org/licenses/osl-3.0.php //
11
/////////////////////////////////////////////////////////////
13
#include "EllipsoidVol.h"
22
// --- STL includes ---
27
EllipsoidVol::EllipsoidVol()
30
EllipsoidVol::EllipsoidVol(const Vector3& c, double lx, double ly, double lz)
38
pair<Vector3,Vector3> EllipsoidVol::getBoundingBox()
40
Vector3 r=Vector3(0.5*m_lx,0.5*m_ly,0.5*m_lz);
41
return make_pair(m_posn-r,m_posn+r);
44
Vector3 EllipsoidVol::getAPoint(int) const
47
double r=m_sph.Radius()*((double)(rand())/(double)(RAND_MAX));
48
double phi=M_PI*((double)(rand())/(double)(RAND_MAX));
49
double rho=2*M_PI*((double)(rand())/(double)(RAND_MAX));
51
double rx = m_lx*((double)(rand())/(double)(RAND_MAX) - 0.5);
52
double ry = m_ly*((double)(rand())/(double)(RAND_MAX) - 0.5);
53
double rz = m_lz*((double)(rand())/(double)(RAND_MAX) - 0.5);
55
return m_posn + Vector3(rx,ry,rz);
58
const map<double,const AGeometricObject*> EllipsoidVol::getClosestObjects(const Vector3& P,int) const
60
map<double,const AGeometricObject*> res;
62
// res.insert(make_pair(m_sph.getDist(P),&m_sph));
67
bool EllipsoidVol::isIn(const Vector3& P) const
69
Vector3 dR = P - m_posn;
73
double delta = rx*rx/(m_lx*m_lx) + ry*ry/(m_ly*m_ly) + rz*rz/(m_lz*m_lz) ;
80
bool EllipsoidVol::isIn(const Sphere& S)
82
// return (m_sph.getDist(S.Center())>S.Radius());
83
return (isIn(S.Center()));
87
Check if sphere is fully outside the volume.
90
\warning DUMMY IMPLEMENTATION
92
bool EllipsoidVol::isFullyOutside(const Sphere&)
97
ostream& operator << (ostream& ost,const EllipsoidVol& T)