ESyS-Particle  2.3.2
SimpleParticle.hpp
Go to the documentation of this file.
1 
2 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
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 //
10 // //
12 
13 
14 SimpleParticle::SimpleParticle(const Vec3& pos,double rad,int id, int tag)
15  : SimpleParticleData(pos, rad, id, tag)
16 {
17 }
18 
20  : SimpleParticleData(p)
21 {
22 }
23 
25 {
27  return *this;
28 }
29 
31 {
32  return getPosition();
33 }
34 
35 void SimpleParticle::setPos(const Vec3 &pos)
36 {
37  setPosition(pos);
38 }
39 
41 {
42  setPosition(v);
43 }
44 
46 {
48 }
49 
51 {
52  translateBy(v);
53 }
54 
55 void SimpleParticle::rotate(const Vec3 &rotation, const Vec3 &posn)
56 {
57  // From http://mathworld.wolfram.com/RotationFormula.html
58  const double phi = rotation.norm();
59  if (phi > 0.0)
60  {
61  const Vec3 r = getPosition() - posn;
62  const Vec3 n = rotation/phi;
63  const double cosPhi = cos(phi);
64  const Vec3 rotatedR =
65  r*cosPhi + n*((dot(n, r))*(1-cosPhi)) + cross(r, n)*sin(phi);
66  setPosition(rotatedR + posn);
67  }
68 }
69 
70 double SimpleParticle::getRad() const
71 {
72  return getRadius();
73 }
74 
75 void SimpleParticle::setRad(double r)
76 {
77  setRadius(r);
78 }
79 
81 {
82  return (getID() >= 0);
83 }
84 
85 template <typename TmplVisitor>
86 void SimpleParticle::visit(const TmplVisitor &visitor) const
87 {
88  visitor.visitSimpleParticle(*this);
89 }
90 
91 template <typename TmplVisitor>
92 void SimpleParticle::visit(TmplVisitor &visitor)
93 {
94  visitor.visitSimpleParticle(*this);
95 }
96 
97 ostream& operator<<(ostream& ost,const SimpleParticle& p)
98 {
99  ost
100  << "Particle- id " << p.getId()
101  << " pos: " << p.getPosition()
102  << " rad: " << p.getRadius()
103  << " tag : " << p.getTag() << std::endl;
104  return ost;
105 }
106 
107 ParticleComparer::ParticleComparer(const SimpleParticle &particle) : m_pParticle(&particle)
108 {
109 }
110 
116 {
117  return (((p1.getPos() - m_pParticle->getPos()).norm() - p1.getRad())<
118  ((p2.getPos() - m_pParticle->getPos()).norm() - p2.getRad()));
119 }
120 
126 {
127  return (*this)(*p1, *p2);
128 }