• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

step/stepcore

  • sources
  • kde-4.12
  • kdeedu
  • step
  • stepcore
particle.h
Go to the documentation of this file.
1 /* This file is part of StepCore library.
2  Copyright (C) 2007 Vladimir Kuznetsov <ks.vladimir@gmail.com>
3 
4  StepCore library is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  StepCore library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with StepCore; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
23 #ifndef STEPCORE_PARTICLE_H
24 #define STEPCORE_PARTICLE_H
25 
26 #include "world.h"
27 #include "vector.h"
28 #include "object.h"
29 
30 namespace StepCore {
31 
32 class Particle;
33 class ChargedParticle;
34 
38 class ParticleErrors: public ObjectErrors
39 {
40  STEPCORE_OBJECT(ParticleErrors)
41 
42 public:
44  ParticleErrors(Item* owner = 0)
45  : ObjectErrors(owner), _positionVariance(0,0), _velocityVariance(0,0),
46  _forceVariance(0,0), _massVariance(0) {}
47 
49  Particle* particle() const;
50 
52  const Vector2d& positionVariance() const { return _positionVariance; }
54  void setPositionVariance(const Vector2d& positionVariance) {
55  _positionVariance = positionVariance; }
56 
58  const Vector2d& velocityVariance() const { return _velocityVariance; }
60  void setVelocityVariance(const Vector2d& velocityVariance) {
61  _velocityVariance = velocityVariance; }
62 
64  Vector2d accelerationVariance() const;
65 
67  const Vector2d& forceVariance() const { return _forceVariance; }
69  void setForceVariance(const Vector2d& forceVariance) {
70  _forceVariance = forceVariance; }
71 
73  void applyForceVariance(const Vector2d& forceVariance) {
74  _forceVariance += forceVariance; }
75 
77  double massVariance() const { return _massVariance; }
79  void setMassVariance(double massVariance) {
80  _massVariance = massVariance; }
81 
83  Vector2d momentumVariance() const;
85  void setMomentumVariance(const Vector2d& momentumVariance);
86 
88  double kineticEnergyVariance() const;
90  void setKineticEnergyVariance(double kineticEnergyVariance);
91 
92 protected:
93  Vector2d _positionVariance;
94  Vector2d _velocityVariance;
95  Vector2d _forceVariance;
96  double _massVariance;
97  friend class Particle;
98 };
99 
103 class Particle: public Item, public Body
104 {
105  STEPCORE_OBJECT(Particle)
106 
107 public:
108  enum {
109  PositionOffset = 0
110  };
111 
113  explicit Particle(Vector2d position = Vector2d::Zero(),
114  Vector2d velocity = Vector2d::Zero(), double mass = 1);
115 
117  const Vector2d& position() const { return _position; }
119  void setPosition(const Vector2d& position) { _position = position; }
120 
122  const Vector2d& velocity() const { return _velocity; }
124  void setVelocity(const Vector2d& velocity) { _velocity = velocity; }
125 
127  Vector2d acceleration() const { return _force/_mass; }
128 
130  const Vector2d& force() const { return _force; }
132  void setForce(const Vector2d& force) { _force = force; }
133 
135  void applyForce(const Vector2d& force) { _force += force; }
136 
138  double mass() const { return _mass; }
140  void setMass(double mass) { _mass = mass; }
141 
143  Vector2d momentum() const { return _velocity * _mass; }
145  void setMomentum(const Vector2d& momentum) { _velocity = momentum / _mass; }
146 
148  double kineticEnergy() const { return _mass * _velocity.squaredNorm()/2; }
150  void setKineticEnergy(double kineticEnergy);
151 
152  int variablesCount() { return 2; }
153  void getVariables(double* position, double* velocity,
154  double* positionVariance, double* velocityVariance);
155  void setVariables(const double* position, const double* velocity,
156  const double* positionVariance, const double* velocityVariance);
157  void addForce(const double* force, const double* forceVariance);
158  void resetForce(bool resetVariance);
159  void getAccelerations(double* acceleration, double* accelerationVariance);
160  void getInverseMass(VectorXd* inverseMass,
161  DynSparseRowMatrix* variance, int offset);
162 
164  ParticleErrors* particleErrors() {
165  return static_cast<ParticleErrors*>(objectErrors()); }
166 
167 protected:
168  ObjectErrors* createObjectErrors() { return new ParticleErrors(this); }
169 
170  Vector2d _position;
171  Vector2d _velocity;
172  Vector2d _force;
173  double _mass;
174 };
175 
179 class ChargedParticleErrors: public ParticleErrors
180 {
181  STEPCORE_OBJECT(ChargedParticleErrors)
182 
183 public:
185  ChargedParticleErrors(Item* owner = 0)
186  : ParticleErrors(owner), _chargeVariance(0) {}
187 
189  ChargedParticle* chargedParticle() const;
190 
192  double chargeVariance() const { return _chargeVariance; }
194  void setChargeVariance(double chargeVariance) {
195  _chargeVariance = chargeVariance; }
196 
197 protected:
198  double _chargeVariance;
199  friend class ChargedParticle;
200 };
201 
202 
206 class ChargedParticle: public Particle
207 {
208  STEPCORE_OBJECT(ChargedParticle)
209 
210 public:
212  explicit ChargedParticle(Vector2d position = Vector2d::Zero(),
213  Vector2d velocity = Vector2d::Zero(), double mass = 1, double charge = 0)
214  : Particle(position, velocity, mass), _charge(charge) {}
215 
217  double charge() const { return _charge; }
219  void setCharge(double charge) { _charge = charge; }
220 
222  ChargedParticleErrors* chargedParticleErrors() {
223  return static_cast<ChargedParticleErrors*>(objectErrors()); }
224 
225 protected:
226  ObjectErrors* createObjectErrors() { return new ChargedParticleErrors(this); }
227 
228  double _charge;
229 };
230 
231 } // namespace StepCore
232 
233 #endif
234 
StepCore::Particle::mass
double mass() const
Get mass of the particle.
Definition: particle.h:138
StepCore::ParticleErrors::massVariance
double massVariance() const
Get mass variance.
Definition: particle.h:77
StepCore::Particle::momentum
Vector2d momentum() const
Get momentum of the particle.
Definition: particle.h:143
StepCore::Particle::setVelocity
void setVelocity(const Vector2d &velocity)
Set velocity of the particle.
Definition: particle.h:124
StepCore::Particle::createObjectErrors
ObjectErrors * createObjectErrors()
Definition: particle.h:168
StepCore::Body
Interface for bodies.
Definition: world.h:138
StepCore::ChargedParticle::ChargedParticle
ChargedParticle(Vector2d position=Vector2d::Zero(), Vector2d velocity=Vector2d::Zero(), double mass=1, double charge=0)
Constructs a charged particle.
Definition: particle.h:212
StepCore::Particle::setMass
void setMass(double mass)
Set mass of the particle.
Definition: particle.h:140
StepCore::ParticleErrors::setMomentumVariance
void setMomentumVariance(const Vector2d &momentumVariance)
Set momentum variance (will modify velocity variance)
Definition: particle.cc:82
StepCore::ParticleErrors::setForceVariance
void setForceVariance(const Vector2d &forceVariance)
Set force variance.
Definition: particle.h:69
StepCore::Particle::setForce
void setForce(const Vector2d &force)
Set force that acts upon particle.
Definition: particle.h:132
StepCore::ParticleErrors::_forceVariance
Vector2d _forceVariance
Definition: particle.h:95
StepCore::Particle::_velocity
Vector2d _velocity
Definition: particle.h:171
StepCore::Vector2d
Eigen::Vector2d Vector2d
Two-dimensional vector with double components.
Definition: vector.h:29
StepCore::ChargedParticle
ChargedParticle with mass and charge.
Definition: particle.h:206
StepCore::Particle::addForce
void addForce(const double *force, const double *forceVariance)
Add force and (possibly) its variance to force accomulator.
Definition: particle.cc:154
StepCore::ParticleErrors::setVelocityVariance
void setVelocityVariance(const Vector2d &velocityVariance)
Set velocity variance.
Definition: particle.h:60
StepCore::ChargedParticleErrors::chargedParticle
ChargedParticle * chargedParticle() const
Get owner as ChargedParticle.
Definition: particle.cc:105
StepCore::ParticleErrors::applyForceVariance
void applyForceVariance(const Vector2d &forceVariance)
Increment force variance.
Definition: particle.h:73
StepCore::ChargedParticle::charge
double charge() const
Charge of the particle.
Definition: particle.h:217
StepCore::Particle::resetForce
void resetForce(bool resetVariance)
Reset force accomulator and (possibly) its variance to zero.
Definition: particle.cc:165
StepCore::Particle::particleErrors
ParticleErrors * particleErrors()
Get (and possibly create) ParticleErrors object.
Definition: particle.h:164
StepCore::Particle::setMomentum
void setMomentum(const Vector2d &momentum)
Set momentum of the particle (will modify only velocity)
Definition: particle.h:145
StepCore::Particle::_mass
double _mass
Definition: particle.h:173
StepCore::ParticleErrors::ParticleErrors
ParticleErrors(Item *owner=0)
Constructs ParticleErrors.
Definition: particle.h:44
world.h
Item, Body, Force and Tool interfaces, World class.
StepCore::ChargedParticle::setCharge
void setCharge(double charge)
Charge of the particle.
Definition: particle.h:219
StepCore::ChargedParticleErrors::ChargedParticleErrors
ChargedParticleErrors(Item *owner=0)
Constructs ChargedParticleErrors.
Definition: particle.h:185
StepCore::ChargedParticleErrors::chargeVariance
double chargeVariance() const
Get charge variance.
Definition: particle.h:192
StepCore::Particle::variablesCount
int variablesCount()
Get count of dynamic variables (not including velocities)
Definition: particle.h:152
StepCore::Item
The root class for any world items (bodies and forces)
Definition: world.h:69
StepCore::ChargedParticle::chargedParticleErrors
ChargedParticleErrors * chargedParticleErrors()
Get (and possibly create) ChargedParticleErrors object.
Definition: particle.h:222
StepCore::ParticleErrors::accelerationVariance
Vector2d accelerationVariance() const
Get acceleration variance.
StepCore::Particle::PositionOffset
Offset of particle position in variables array.
Definition: particle.h:109
StepCore::ChargedParticle::_charge
double _charge
Definition: particle.h:228
StepCore::ParticleErrors::setMassVariance
void setMassVariance(double massVariance)
Set mass variance.
Definition: particle.h:79
StepCore::ParticleErrors::particle
Particle * particle() const
Get owner as Particle.
StepCore::ObjectErrors
Base class for all errors objects.
Definition: world.h:49
StepCore::ChargedParticleErrors::_chargeVariance
double _chargeVariance
Definition: particle.h:198
StepCore::ParticleErrors::positionVariance
const Vector2d & positionVariance() const
Get position variance.
Definition: particle.h:52
StepCore::Particle::force
const Vector2d & force() const
Get force that acts upon particle.
Definition: particle.h:130
StepCore::ParticleErrors::velocityVariance
const Vector2d & velocityVariance() const
Get velocity variance.
Definition: particle.h:58
StepCore::ParticleErrors::_massVariance
double _massVariance
Definition: particle.h:96
StepCore::Particle::applyForce
void applyForce(const Vector2d &force)
Apply force to the body.
Definition: particle.h:135
StepCore::ParticleErrors::kineticEnergyVariance
double kineticEnergyVariance() const
Get kinetic energy variance.
Definition: particle.cc:88
StepCore::Particle
Particle with mass.
Definition: particle.h:103
StepCore::ChargedParticleErrors::setChargeVariance
void setChargeVariance(double chargeVariance)
Set charge variance.
Definition: particle.h:194
StepCore::Particle::getVariables
void getVariables(double *position, double *velocity, double *positionVariance, double *velocityVariance)
Copy positions, velocities and (possibly) its variances to arrays.
Definition: particle.cc:115
StepCore::Particle::Particle
Particle(Vector2d position=Vector2d::Zero(), Vector2d velocity=Vector2d::Zero(), double mass=1)
Constructs a particle.
Definition: particle.cc:110
StepCore::Particle::getAccelerations
void getAccelerations(double *acceleration, double *accelerationVariance)
Copy acceleration (forces left-multiplied by inverse mass) and (possibly) its variances to arrays...
Definition: particle.cc:141
object.h
Object, MetaObject and MetaProperty classes.
vector.h
StepCore::ParticleErrors::forceVariance
const Vector2d & forceVariance() const
Get force variance.
Definition: particle.h:67
StepCore::Particle::getInverseMass
void getInverseMass(VectorXd *inverseMass, DynSparseRowMatrix *variance, int offset)
Get inverse mass and (possibly) its variance matrixes.
Definition: particle.cc:171
StepCore::Item::objectErrors
ObjectErrors * objectErrors()
Get existing ObjectErrors or try to create it.
Definition: world.cc:67
StepCore::Particle::setPosition
void setPosition(const Vector2d &position)
Set position of the particle.
Definition: particle.h:119
StepCore::Particle::setKineticEnergy
void setKineticEnergy(double kineticEnergy)
Set kinetic energy of the particle (will modify only velocity)
Definition: particle.cc:183
StepCore::ParticleErrors::momentumVariance
Vector2d momentumVariance() const
Get momentum variance.
Definition: particle.cc:76
StepCore::ParticleErrors::setPositionVariance
void setPositionVariance(const Vector2d &positionVariance)
Set position variance.
Definition: particle.h:54
StepCore::Particle::_force
Vector2d _force
Definition: particle.h:172
StepCore::DynSparseRowMatrix
Eigen::DynamicSparseMatrix< double, Eigen::RowMajor > DynSparseRowMatrix
Definition: types.h:38
StepCore::Particle::position
const Vector2d & position() const
Get position of the particle.
Definition: particle.h:117
StepCore::ObjectErrors::owner
Item * owner() const
Get the owner of ObjectErrors.
Definition: world.h:58
StepCore::ChargedParticle::createObjectErrors
ObjectErrors * createObjectErrors()
Definition: particle.h:226
StepCore::ParticleErrors::_positionVariance
Vector2d _positionVariance
Definition: particle.h:93
STEPCORE_OBJECT
#define STEPCORE_OBJECT(_className)
Definition: object.h:49
StepCore::Particle::velocity
const Vector2d & velocity() const
Get velocity of the particle.
Definition: particle.h:122
StepCore::Particle::_position
Vector2d _position
Definition: particle.h:170
StepCore::VectorXd
Eigen::VectorXd VectorXd
Definition: vector.h:38
StepCore::ParticleErrors::_velocityVariance
Vector2d _velocityVariance
Definition: particle.h:94
StepCore::ChargedParticleErrors
Errors object for ChargedParticle.
Definition: particle.h:179
StepCore::ParticleErrors
Errors object for Particle.
Definition: particle.h:38
StepCore::Particle::setVariables
void setVariables(const double *position, const double *velocity, const double *positionVariance, const double *velocityVariance)
Set positions, velocities and (possibly) its variances using values in arrays and also reset accelera...
Definition: particle.cc:127
StepCore::ParticleErrors::setKineticEnergyVariance
void setKineticEnergyVariance(double kineticEnergyVariance)
Set kinetic energy variance (will modify velocity variance)
Definition: particle.cc:94
StepCore::Particle::acceleration
Vector2d acceleration() const
Get acceleration of the particle.
Definition: particle.h:127
StepCore::Particle::kineticEnergy
double kineticEnergy() const
Get kinetic energy of the particle.
Definition: particle.h:148
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:43:06 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

step/stepcore

Skip menu "step/stepcore"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal