• 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
rigidbody.cc
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 
19 #include "rigidbody.h"
20 #include "types.h"
21 #include <cstring>
22 #include <cmath>
23 
24 namespace StepCore
25 {
26 
27 STEPCORE_META_OBJECT(RigidBody, QT_TRANSLATE_NOOP("ObjectClass", "RigidBody"), QT_TR_NOOP("Generic rigid body"), 0, STEPCORE_SUPER_CLASS(Item) STEPCORE_SUPER_CLASS(Body),
28  STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, position, QT_TRANSLATE_NOOP("PropertyName", "position"), QT_TRANSLATE_NOOP("Units", "m"), QT_TR_NOOP("Position of the center of mass"), position, setPosition)
29  STEPCORE_PROPERTY_RW_D(double, angle, QT_TRANSLATE_NOOP("PropertyName", "angle"), QT_TRANSLATE_NOOP("Units", "rad"), QT_TR_NOOP("Rotation angle"), angle, setAngle)
30 
31  STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, velocity, QT_TRANSLATE_NOOP("PropertyName", "velocity"), QT_TRANSLATE_NOOP("Units", "m/s"), QT_TR_NOOP("Velocity of the center of mass"), velocity, setVelocity)
32  STEPCORE_PROPERTY_RW_D(double, angularVelocity, QT_TRANSLATE_NOOP("PropertyName", "angularVelocity"), QT_TRANSLATE_NOOP("Units", "rad/s"), QT_TR_NOOP("Angular velocity of the body"), angularVelocity, setAngularVelocity)
33 
34  STEPCORE_PROPERTY_R_D(StepCore::Vector2d, acceleration, QT_TRANSLATE_NOOP("PropertyName", "acceleration"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "m/s²")),
35  QT_TR_NOOP("Acceleration of the center of mass"), acceleration)
36  STEPCORE_PROPERTY_R_D(double, angularAcceleration, QT_TRANSLATE_NOOP("PropertyName", "angularAcceleration"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "rad/s²")),
37  QT_TR_NOOP("Angular acceleration of the body"), angularAcceleration)
38 
39  STEPCORE_PROPERTY_R_D(StepCore::Vector2d, force, QT_TRANSLATE_NOOP("PropertyName", "force"), QT_TRANSLATE_NOOP("Units", "N"), QT_TR_NOOP("Force that acts upon the body"), force)
40  STEPCORE_PROPERTY_R_D(double, torque, QT_TRANSLATE_NOOP("PropertyName", "torque"), QT_TRANSLATE_NOOP("Units", "N m"), QT_TR_NOOP("Torque that acts upon the body"), torque)
41 
42  STEPCORE_PROPERTY_RW(double, mass, QT_TRANSLATE_NOOP("PropertyName", "mass"), QT_TRANSLATE_NOOP("Units", "kg"), QT_TR_NOOP("Total mass of the body"), mass, setMass)
43  STEPCORE_PROPERTY_RW(double, inertia, QT_TRANSLATE_NOOP("PropertyName", "inertia"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "kg m²")),
44  QT_TR_NOOP("Inertia \"tensor\" of the body"), inertia, setInertia)
45  STEPCORE_PROPERTY_RWF(StepCore::Vector2d, momentum, QT_TRANSLATE_NOOP("PropertyName", "momentum"), QT_TRANSLATE_NOOP("Units", "kg m/s"), QT_TR_NOOP("momentum"),
46  StepCore::MetaProperty::DYNAMIC, momentum, setMomentum)
47  STEPCORE_PROPERTY_RWF(double, angularMomentum, QT_TRANSLATE_NOOP("PropertyName", "angularMomentum"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "kg m² rad/s")), QT_TR_NOOP("angular momentum"),
48  StepCore::MetaProperty::DYNAMIC, angularMomentum, setAngularMomentum)
49  STEPCORE_PROPERTY_RWF(double, kineticEnergy, QT_TRANSLATE_NOOP("PropertyName", "kineticEnergy"), QT_TRANSLATE_NOOP("Units", "J"), QT_TR_NOOP("kinetic energy"),
50  StepCore::MetaProperty::DYNAMIC, kineticEnergy, setKineticEnergy))
51 
52 STEPCORE_META_OBJECT(RigidBodyErrors, QT_TRANSLATE_NOOP("ObjectClass", "RigidBodyErrors"), QT_TR_NOOP("Errors class for RigidBody"), 0, STEPCORE_SUPER_CLASS(ObjectErrors),
53  STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, positionVariance, QT_TRANSLATE_NOOP("PropertyName", "positionVariance"), QT_TRANSLATE_NOOP("Units", "m"),
54  QT_TR_NOOP("position variance"), positionVariance, setPositionVariance)
55  STEPCORE_PROPERTY_RW_D(double, angleVariance, QT_TRANSLATE_NOOP("PropertyName", "angleVariance"), QT_TRANSLATE_NOOP("Units", "rad"),
56  QT_TR_NOOP("angle variance"), angleVariance, setAngleVariance)
57 
58  STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, velocityVariance, QT_TRANSLATE_NOOP("PropertyName", "velocityVariance"), QT_TRANSLATE_NOOP("Units", "m/s"),
59  QT_TR_NOOP("velocity variance"), velocityVariance, setVelocityVariance)
60  STEPCORE_PROPERTY_RW_D(double, angularVelocityVariance, QT_TRANSLATE_NOOP("PropertyName", "angularVelocityVariance"), QT_TRANSLATE_NOOP("Units", "rad/s"),
61  QT_TR_NOOP("angularVelocity variance"), angularVelocityVariance, setAngularVelocityVariance)
62 
63  STEPCORE_PROPERTY_R_D(StepCore::Vector2d, accelerationVariance, QT_TRANSLATE_NOOP("PropertyName", "accelerationVariance"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "m/s²")),
64  QT_TR_NOOP("acceleration variance"), accelerationVariance)
65  STEPCORE_PROPERTY_R_D(double, angularAccelerationVariance, QT_TRANSLATE_NOOP("PropertyName", "angularAccelerationVariance"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "rad/s²")),
66  QT_TR_NOOP("angularAcceleration variance"), angularAccelerationVariance)
67 
68  STEPCORE_PROPERTY_R_D(StepCore::Vector2d, forceVariance, QT_TRANSLATE_NOOP("PropertyName", "forceVariance"), QT_TRANSLATE_NOOP("Units", "N"), QT_TR_NOOP("force variance"), forceVariance)
69  STEPCORE_PROPERTY_R_D(double, torqueVariance, QT_TRANSLATE_NOOP("PropertyName", "torqueVariance"), QT_TRANSLATE_NOOP("Units", "N m"), QT_TR_NOOP("torque variance"), torqueVariance)
70 
71  STEPCORE_PROPERTY_RW(double, massVariance, QT_TRANSLATE_NOOP("PropertyName", "massVariance"), QT_TRANSLATE_NOOP("Units", "kg"),
72  QT_TR_NOOP("mass variance"), massVariance, setMassVariance )
73  STEPCORE_PROPERTY_RW(double, inertiaVariance, QT_TRANSLATE_NOOP("PropertyName", "inertiaVariance"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "kg m²")),
74  QT_TR_NOOP("inertia variance"), inertiaVariance, setInertiaVariance )
75  STEPCORE_PROPERTY_RWF(StepCore::Vector2d, momentumVariance, QT_TRANSLATE_NOOP("PropertyName", "momentumVariance"), QT_TRANSLATE_NOOP("Units", "kg m/s"),
76  QT_TR_NOOP("momentum variance"), StepCore::MetaProperty::DYNAMIC, momentumVariance, setMomentumVariance)
77  STEPCORE_PROPERTY_RWF(double, angularMomentumVariance, QT_TRANSLATE_NOOP("PropertyName", "angularMomentumVariance"), STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units", "kg m² rad/s")),
78  QT_TR_NOOP("angular momentum variance"), StepCore::MetaProperty::DYNAMIC,
79  angularMomentumVariance, setAngularMomentumVariance)
80  STEPCORE_PROPERTY_RWF(double, kineticEnergyVariance, QT_TRANSLATE_NOOP("PropertyName", "kineticEnergyVariance"), QT_TRANSLATE_NOOP("Units", "J"),
81  QT_TR_NOOP("kinetic energy variance"), StepCore::MetaProperty::DYNAMIC, kineticEnergyVariance, setKineticEnergyVariance))
82 
83 STEPCORE_META_OBJECT(Disk, QT_TRANSLATE_NOOP("ObjectClass", "Disk"), QT_TR_NOOP("Rigid disk"), 0, STEPCORE_SUPER_CLASS(RigidBody),
84  STEPCORE_PROPERTY_RW(double, radius, QT_TRANSLATE_NOOP("PropertyName", "radius"), QT_TRANSLATE_NOOP("Units", "m"), QT_TR_NOOP("Radius of the disk"), radius, setRadius))
85 
86 STEPCORE_META_OBJECT(BasePolygon, QT_TRANSLATE_NOOP("ObjectClass", "BasePolygon"), QT_TR_NOOP("Base polygon body"), 0, STEPCORE_SUPER_CLASS(RigidBody),)
87 
88 STEPCORE_META_OBJECT(Box, QT_TRANSLATE_NOOP("ObjectClass", "Box"), QT_TR_NOOP("Rigid box"), 0, STEPCORE_SUPER_CLASS(BasePolygon),
89  STEPCORE_PROPERTY_RW(StepCore::Vector2d, size, QT_TRANSLATE_NOOP("PropertyName", "size"), QT_TRANSLATE_NOOP("Units", "m"), QT_TR_NOOP("Size of the box"), size, setSize))
90 
91 STEPCORE_META_OBJECT(Polygon, QT_TRANSLATE_NOOP("ObjectClass", "Polygon"), QT_TR_NOOP("Rigid polygon body"), 0, STEPCORE_SUPER_CLASS(BasePolygon),
92  STEPCORE_PROPERTY_RW(Vector2dList, vertexes, QT_TRANSLATE_NOOP("PropertyName", "vertices"), QT_TRANSLATE_NOOP("Units", "m"), QT_TR_NOOP("Vertex list"), vertexes, setVertexes))
93 
94 #if 0
95 STEPCORE_META_OBJECT(Plane, QT_TRANSLATE_NOOP("ObjectClass", "Plane"), QT_TR_NOOP("Unmovable rigid plane"), 0, STEPCORE_SUPER_CLASS(Item) STEPCORE_SUPER_CLASS(Body),
96  STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, point1, QT_TRANSLATE_NOOP("PropertyName", "point1"), QT_TRANSLATE_NOOP("Units", "m"), QT_TR_NOOP("First point which defines the plane"), point1, setPoint1),
97  STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, point2, QT_TRANSLATE_NOOP("PropertyName", "point2"), QT_TRANSLATE_NOOP("Units", "m"), QT_TR_NOOP("Second point which defines the plane"), point2, setPoint2))
98 #endif
99 
100 RigidBody* RigidBodyErrors::rigidBody() const
101 {
102  return static_cast<RigidBody*>(owner());
103 }
104 
105 Vector2d RigidBodyErrors::accelerationVariance() const
106 {
107  return _forceVariance/square(rigidBody()->mass()) +
108  _massVariance*(rigidBody()->force()/square(rigidBody()->mass())).cwise().square();
109 }
110 
111 double RigidBodyErrors::angularAccelerationVariance() const
112 {
113  return _torqueVariance/square(rigidBody()->inertia()) +
114  _inertiaVariance*square(rigidBody()->torque()/square(rigidBody()->inertia()));
115 }
116 
117 Vector2d RigidBodyErrors::momentumVariance() const
118 {
119  return _velocityVariance * square(rigidBody()->mass()) +
120  rigidBody()->velocity().cwise().square() * _massVariance;
121 }
122 
123 void RigidBodyErrors::setMomentumVariance(const Vector2d& momentumVariance)
124 {
125  _velocityVariance = (momentumVariance - rigidBody()->velocity().cwise().square() * _massVariance) /
126  square(rigidBody()->mass());
127 }
128 
129 double RigidBodyErrors::angularMomentumVariance() const
130 {
131  return _angularVelocityVariance * square(rigidBody()->inertia()) +
132  square(rigidBody()->angularVelocity()) * _inertiaVariance;
133 }
134 
135 void RigidBodyErrors::setAngularMomentumVariance(double angularMomentumVariance)
136 {
137  _angularVelocityVariance =
138  (angularMomentumVariance - square(rigidBody()->angularVelocity()) * _inertiaVariance) /
139  square(rigidBody()->inertia());
140 }
141 
142 double RigidBodyErrors::kineticEnergyVariance() const
143 {
144  return _velocityVariance.dot(rigidBody()->velocity().cwise().square()) * square(rigidBody()->mass()) +
145  square(rigidBody()->velocity().squaredNorm()/2) * _massVariance +
146  _angularVelocityVariance * square(rigidBody()->angularVelocity() * rigidBody()->inertia()) +
147  square(square(rigidBody()->angularVelocity())/2) * _inertiaVariance;
148 }
149 
150 void RigidBodyErrors::setKineticEnergyVariance(double kineticEnergyVariance)
151 {
152  double t = kineticEnergyVariance - this->kineticEnergyVariance() +
153  _velocityVariance.dot(rigidBody()->velocity().cwise().square()) * square(rigidBody()->mass());
154  _velocityVariance = t / square(rigidBody()->mass()) / 2 *
155  (rigidBody()->velocity().cwise().square().cwise().inverse());
156  if(!std::isfinite(_velocityVariance[0]) || _velocityVariance[0] < 0 ||
157  !std::isfinite(_velocityVariance[1]) || _velocityVariance[1]) {
158  _velocityVariance.setZero();
159  }
160  // XXX: change angularVelocity here as well
161 }
162 
163 RigidBody::RigidBody(Vector2d position, double angle,
164  Vector2d velocity, double angularVelocity, double mass, double inertia)
165  : _position(position), _angle(angle), _velocity(velocity), _angularVelocity(angularVelocity),
166  _force(Vector2d::Zero()), _torque(0), _mass(mass), _inertia(inertia)
167 {
168 }
169 
170 void RigidBody::applyForce(const Vector2d& force, const Vector2d& position)
171 {
172  _force += force;
173  _torque += (position[0] - _position[0])*force[1] -
174  (position[1] - _position[1])*force[0]; // XXX: sign ?
175 }
176 
177 void RigidBodyErrors::applyForceVariance(const Vector2d& force,
178  const Vector2d& position,
179  const Vector2d& forceVariance,
180  const Vector2d& positionVariance)
181 {
182  _forceVariance += forceVariance;
183  _torqueVariance += forceVariance[1] * square(position[0] - rigidBody()->_position[0]) +
184  forceVariance[0] * square(position[1] - rigidBody()->_position[1]) +
185  (positionVariance[0] + _positionVariance[0]) * square(force[1]) +
186  (positionVariance[1] + _positionVariance[1]) * square(force[0]);
187 }
188 
189 Vector2d RigidBody::velocityWorld(const Vector2d& worldPoint) const
190 {
191  Vector2d p = (worldPoint - _position)*_angularVelocity;
192  return _velocity + Vector2d(-p[1], p[0]);
193 }
194 
195 Vector2d RigidBody::velocityLocal(const Vector2d& localPoint) const
196 {
197  Vector2d p = vectorLocalToWorld(localPoint)*_angularVelocity;
198  return _velocity + Vector2d(-p[1], p[0]);
199 }
200 
201 Vector2d RigidBody::pointLocalToWorld(const Vector2d& p) const
202 {
203  double c = cos(_angle);
204  double s = sin(_angle);
205  return Vector2d( p[0]*c - p[1]*s + _position[0],
206  p[0]*s + p[1]*c + _position[1]);
207 }
208 
209 Vector2d RigidBody::pointWorldToLocal(const Vector2d& p) const
210 {
211  double c = cos(_angle);
212  double s = sin(_angle);
213  return Vector2d( (p[0]-_position[0])*c + (p[1]-_position[1])*s,
214  -(p[0]-_position[0])*s + (p[1]-_position[1])*c);
215 }
216 
217 Vector2d RigidBody::vectorLocalToWorld(const Vector2d& v) const
218 {
219  double c = cos(_angle);
220  double s = sin(_angle);
221  return Vector2d( v[0]*c - v[1]*s,
222  v[0]*s + v[1]*c);
223 }
224 
225 Vector2d RigidBody::vectorWorldToLocal(const Vector2d& v) const
226 {
227  double c = cos(_angle);
228  double s = sin(_angle);
229  return Vector2d( v[0]*c + v[1]*s,
230  -v[0]*s + v[1]*c);
231 }
232 
233 void RigidBody::getVariables(double* position, double* velocity,
234  double* positionVariance, double* velocityVariance)
235 {
236  Vector2d::Map(position) = _position;
237  Vector2d::Map(velocity) = _velocity;
238  position[2] = _angle;
239  velocity[2] = _angularVelocity;
240 
241  if(positionVariance) {
242  RigidBodyErrors* re = rigidBodyErrors();
243  Vector2d::Map(positionVariance) = re->_positionVariance;
244  Vector2d::Map(velocityVariance) = re->_velocityVariance;
245  positionVariance[2] = re->_angleVariance;
246  velocityVariance[2] = re->_angularVelocityVariance;
247  }
248 }
249 
250 void RigidBody::setVariables(const double* position, const double* velocity,
251  const double* positionVariance, const double* velocityVariance)
252 {
253  _position = Vector2d::Map(position);
254  _velocity = Vector2d::Map(velocity);
255  _angle = position[2];
256  _angularVelocity = velocity[2];
257 
258  _force.setZero();
259  _torque = 0;
260 
261  if(positionVariance) {
262  RigidBodyErrors* re = rigidBodyErrors();
263  re->_positionVariance = Vector2d::Map(positionVariance);
264  re->_velocityVariance = Vector2d::Map(velocityVariance);
265  re->_angleVariance = positionVariance[2];
266  re->_angularVelocityVariance = velocityVariance[2];
267 
268  re->_forceVariance.setZero();
269  re->_torqueVariance = 0;
270  }
271 }
272 
273 void RigidBody::getAccelerations(double* acceleration, double* accelerationVariance)
274 {
275  acceleration[0] = _force[0] / _mass;
276  acceleration[1] = _force[1] / _mass;
277  acceleration[2] = _torque / _inertia;
278  if(accelerationVariance) {
279  RigidBodyErrors* re = rigidBodyErrors();
280  accelerationVariance[0] = re->_forceVariance[0]/square(_mass) +
281  square(_force[0]/square(_mass))*re->_massVariance;
282  accelerationVariance[1] = re->_forceVariance[1]/square(_mass) +
283  square(_force[1]/square(_mass))*re->_massVariance;
284  accelerationVariance[2] = re->_torqueVariance/square(_inertia) +
285  square(_torque/square(_inertia))*re->_inertiaVariance;
286  }
287 }
288 
289 void RigidBody::addForce(const double* force, const double* forceVariance)
290 {
291  _force[0] += force[0];
292  _force[1] += force[1];
293  _torque += force[2];
294  if(forceVariance) {
295  RigidBodyErrors* re = rigidBodyErrors();
296  re->_forceVariance[0] += forceVariance[0];
297  re->_forceVariance[1] += forceVariance[1];
298  re->_torqueVariance += forceVariance[2];
299  }
300 }
301 
302 void RigidBody::resetForce(bool resetVariance)
303 {
304  _force.setZero();
305  _torque = 0;
306  if(resetVariance) {
307  RigidBodyErrors* re = rigidBodyErrors();
308  re->_forceVariance.setZero();
309  re->_torqueVariance = 0;
310  }
311 }
312 
313 void RigidBody::getInverseMass(VectorXd* inverseMass,
314  DynSparseRowMatrix* variance, int offset)
315 {
316  inverseMass->coeffRef(offset) = (1/_mass);
317  inverseMass->coeffRef(offset+1) = (1/_mass);
318  inverseMass->coeffRef(offset+2) = (1/_inertia);
319  if(variance) {
320  RigidBodyErrors* re = rigidBodyErrors();
321  double vm = re->_massVariance / square(square(_mass));
322  double vi = re->_inertiaVariance / square(square(_inertia));
323  variance->coeffRef(offset, offset) = ( vm);
324  variance->coeffRef(offset+1, offset+1) = ( vm);
325  variance->coeffRef(offset+2, offset+2) = ( vi);
326  }
327 }
328 
329 void RigidBody::setKineticEnergy(double kineticEnergy)
330 {
331  double e = kineticEnergy - _inertia * square(_angularVelocity)/2;
332  if(e > 0) {
333  double v = _velocity.norm();
334  _velocity = sqrt(e*2/_mass) * (v>0 ? (_velocity/v).eval() : Vector2d(1,0));
335  } else {
336  _velocity.setZero();
337  _angularVelocity = sqrt(kineticEnergy*2/_inertia);
338  }
339 }
340 
341 Box::Box(Vector2d position, double angle,
342  Vector2d velocity, double angularVelocity,
343  double mass, double inertia, Vector2d size)
344  : BasePolygon(position, angle, velocity, angularVelocity, mass, inertia)
345 {
346  _vertexes.resize(4);
347  setSize(size);
348 }
349 
350 void Box::setSize(const Vector2d& size)
351 {
352  Vector2d s(size.cwise().abs()/2.0);
353 
354  _vertexes[0] << -s[0], -s[1];
355  _vertexes[1] << s[0], -s[1];
356  _vertexes[2] << s[0], s[1];
357  _vertexes[3] << -s[0], s[1];
358 }
359 
360 } // namespace StepCore
361 
StepCore::RigidBody::applyForce
void applyForce(const Vector2d &force, const Vector2d &position)
Apply force (and torque) to the body at given position (in World coordinates)
Definition: rigidbody.cc:170
StepCore::angleVariance
angleVariance
Definition: rigidbody.cc:55
rigidbody.h
RigidBody class.
StepCore::STEPCORE_PROPERTY_RWF
setAngleVariance setAngularVelocityVariance angularAccelerationVariance torqueVariance setInertiaVariance STEPCORE_PROPERTY_RWF(StepCore::Vector2d, momentumVariance, QT_TRANSLATE_NOOP("PropertyName","momentumVariance"), QT_TRANSLATE_NOOP("Units","kg m/s"), QT_TR_NOOP("momentum variance"), StepCore::MetaProperty::DYNAMIC, momentumVariance, setMomentumVariance) STEPCORE_PROPERTY_RWF(double
StepCore::RigidBody::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: rigidbody.cc:250
StepCore::angularAccelerationVariance
setAngleVariance setAngularVelocityVariance angularAccelerationVariance
Definition: rigidbody.cc:65
StepCore::Body
Interface for bodies.
Definition: world.h:138
types.h
Type to and from string convertion helpers.
StepCore::RigidBody::velocityWorld
Vector2d velocityWorld(const Vector2d &worldPoint) const
Get velocity of given (world) point on the body.
Definition: rigidbody.cc:189
StepCore::RigidBody::_position
Vector2d _position
Definition: rigidbody.h:267
StepCore::Box
Definition: rigidbody.h:325
StepCore::RigidBodyErrors::kineticEnergyVariance
double kineticEnergyVariance() const
Get kinetic energy variance.
Definition: rigidbody.cc:142
StepCore::Vector2d
Eigen::Vector2d Vector2d
Two-dimensional vector with double components.
Definition: vector.h:29
StepCore::Disk
Rigid disk.
Definition: rigidbody.h:285
StepCore::RigidBodyErrors::setMomentumVariance
void setMomentumVariance(const Vector2d &momentumVariance)
Set momentum variance (will modify velocity variance)
Definition: rigidbody.cc:123
StepCore::RigidBodyErrors::momentumVariance
Vector2d momentumVariance() const
Get momentum variance.
Definition: rigidbody.cc:117
StepCore::RigidBody::force
const Vector2d & force() const
Get force that acts upon the body.
Definition: rigidbody.h:190
StepCore::RigidBodyErrors::setAngularMomentumVariance
void setAngularMomentumVariance(double angularMomentumVariance)
Set angular momentum variance (will modify angularVelocity variance)
Definition: rigidbody.cc:135
StepCore::RigidBodyErrors::applyForceVariance
void applyForceVariance(const Vector2d &force, const Vector2d &position, const Vector2d &forceVariance, const Vector2d &positionVariance)
Apply force (and torque) variance to the body at given position (in World coordinates) ...
Definition: rigidbody.cc:177
StepCore::RigidBodyErrors::rigidBody
RigidBody * rigidBody() const
Get owner as RigidBody.
StepCore::STEPCORE_SUPER_CLASS
STEPCORE_SUPER_CLASS(CollisionSolver)
StepCore::RigidBody::pointWorldToLocal
Vector2d pointWorldToLocal(const Vector2d &p) const
Translate world coordinates to local coordinates on body.
Definition: rigidbody.cc:209
StepCore::RigidBody::_inertia
double _inertia
Definition: rigidbody.h:277
StepCore::RigidBodyErrors::_forceVariance
Vector2d _forceVariance
Definition: rigidbody.h:132
StepCore::RigidBody::vectorLocalToWorld
Vector2d vectorLocalToWorld(const Vector2d &v) const
Translate local vector on body to world vector.
Definition: rigidbody.cc:217
StepCore::RigidBody::_velocity
Vector2d _velocity
Definition: rigidbody.h:270
StepCore::RigidBody::_force
Vector2d _force
Definition: rigidbody.h:273
StepCore::STEPCORE_FROM_UTF8
setAngleVariance setAngularVelocityVariance STEPCORE_FROM_UTF8(QT_TRANSLATE_NOOP("Units","rad/s²"))
StepCore::angularMomentumVariance
setAngleVariance setAngularVelocityVariance angularAccelerationVariance torqueVariance setInertiaVariance angularMomentumVariance
Definition: rigidbody.cc:77
StepCore::RigidBodyErrors::_positionVariance
Vector2d _positionVariance
Definition: rigidbody.h:126
StepCore::Polygon
Rigid arbitrary-shaped polygon.
Definition: rigidbody.h:344
StepCore::QT_TRANSLATE_NOOP
QT_TRANSLATE_NOOP("ObjectClass","GJKCollisionSolver")
StepCore::RigidBodyErrors::_inertiaVariance
double _inertiaVariance
Definition: rigidbody.h:136
StepCore::RigidBody::mass
double mass() const
Get mass of the body.
Definition: rigidbody.h:208
StepCore::RigidBodyErrors::angularAccelerationVariance
double angularAccelerationVariance() const
Get angularAcceleration variance.
Definition: rigidbody.cc:111
StepCore::RigidBody::resetForce
void resetForce(bool resetVariance)
Reset force accomulator and (possibly) its variance to zero.
Definition: rigidbody.cc:302
StepCore::RigidBody::_angle
double _angle
Definition: rigidbody.h:268
StepCore::RigidBody::inertia
double inertia() const
Get inertia "tensor" of the body.
Definition: rigidbody.h:213
StepCore::RigidBodyErrors::_massVariance
double _massVariance
Definition: rigidbody.h:135
StepCore::inertiaVariance
setAngleVariance setAngularVelocityVariance angularAccelerationVariance torqueVariance inertiaVariance
Definition: rigidbody.cc:73
StepCore::Item
The root class for any world items (bodies and forces)
Definition: world.h:69
StepCore::RigidBody::pointLocalToWorld
Vector2d pointLocalToWorld(const Vector2d &p) const
Translate local coordinates on body to world coordinates.
Definition: rigidbody.cc:201
StepCore::Box::setSize
void setSize(const Vector2d &size)
Set box size.
Definition: rigidbody.cc:350
StepCore::RigidBody::getVariables
void getVariables(double *position, double *velocity, double *positionVariance, double *velocityVariance)
Copy positions, velocities and (possibly) its variances to arrays.
Definition: rigidbody.cc:233
StepCore::RigidBody::addForce
void addForce(const double *force, const double *forceVariance)
Add force and (possibly) its variance to force accomulator.
Definition: rigidbody.cc:289
StepCore::RigidBodyErrors::accelerationVariance
Vector2d accelerationVariance() const
Get acceleration variance.
StepCore::RigidBodyErrors::_angularVelocityVariance
double _angularVelocityVariance
Definition: rigidbody.h:130
StepCore::RigidBody::velocity
const Vector2d & velocity() const
Get velocity of the center of mass of the body.
Definition: rigidbody.h:170
StepCore::RigidBodyErrors::angularMomentumVariance
double angularMomentumVariance() const
Get angular momentum variance.
Definition: rigidbody.cc:129
StepCore::RigidBody::velocityLocal
Vector2d velocityLocal(const Vector2d &localPoint) const
Get velocity of given (local) point on the body.
Definition: rigidbody.cc:195
StepCore::QT_TR_NOOP
QT_TR_NOOP("Errors class for CoulombForce")
StepCore::torqueVariance
setAngleVariance setAngularVelocityVariance angularAccelerationVariance torqueVariance
Definition: rigidbody.cc:69
StepCore::RigidBody::getAccelerations
void getAccelerations(double *acceleration, double *accelerationVariance)
Copy acceleration (forces left-multiplied by inverse mass) and (possibly) its variances to arrays...
Definition: rigidbody.cc:273
StepCore::STEPCORE_PROPERTY_RW
STEPCORE_PROPERTY_RW(double, depth, QT_TRANSLATE_NOOP("PropertyName","depth"), QT_TRANSLATE_NOOP("Units","J"), QT_TR_NOOP("Potential depth"), depth, setDepth) STEPCORE_PROPERTY_RW(double
StepCore::RigidBody::_mass
double _mass
Definition: rigidbody.h:276
StepCore::RigidBodyErrors::_angleVariance
double _angleVariance
Definition: rigidbody.h:127
StepCore::MetaProperty::DYNAMIC
Variable changes during simulation or changes of other properties.
Definition: object.h:84
StepCore::RigidBody::_torque
double _torque
Definition: rigidbody.h:274
StepCore::RigidBodyErrors::_velocityVariance
Vector2d _velocityVariance
Definition: rigidbody.h:129
StepCore::STEPCORE_PROPERTY_RW_D
STEPCORE_PROPERTY_RW_D(StepCore::Vector2d, positionVariance, QT_TRANSLATE_NOOP("PropertyName","positionVariance"), QT_TRANSLATE_NOOP("Units","m"), QT_TR_NOOP("position variance"), positionVariance, setPositionVariance) STEPCORE_PROPERTY_RW_D(double
StepCore::RigidBodyErrors::setKineticEnergyVariance
void setKineticEnergyVariance(double kineticEnergyVariance)
Set kinetic energy variance (will modify velocity variance)
Definition: rigidbody.cc:150
StepCore::angularVelocityVariance
setAngleVariance angularVelocityVariance
Definition: rigidbody.cc:60
StepCore::RigidBody::_angularVelocity
double _angularVelocity
Definition: rigidbody.h:271
StepCore::RigidBody::RigidBody
RigidBody(Vector2d position=Vector2d::Zero(), double angle=0, Vector2d velocity=Vector2d::Zero(), double angularVelocity=0, double mass=1, double inertia=1)
Constructs RigidBody.
Definition: rigidbody.cc:163
StepCore::BasePolygon::_vertexes
Vector2dList _vertexes
Definition: rigidbody.h:322
StepCore::STEPCORE_PROPERTY_R_D
setRmin setRminVariance STEPCORE_PROPERTY_R_D(double, rectPressureVariance, QT_TRANSLATE_NOOP("PropertyName","rectPressureVariance"), QT_TRANSLATE_NOOP("Units","Pa"), QT_TR_NOOP("Variance of pressure of particles in the measureRect"), rectPressureVariance) STEPCORE_PROPERTY_R_D(double
StepCore::BasePolygon
Base class for all polygons.
Definition: rigidbody.h:308
StepCore::DynSparseRowMatrix
Eigen::DynamicSparseMatrix< double, Eigen::RowMajor > DynSparseRowMatrix
Definition: types.h:38
StepCore::STEPCORE_META_OBJECT
STEPCORE_META_OBJECT(CollisionSolver, QT_TRANSLATE_NOOP("ObjectClass","CollisionSolver"),"CollisionSolver", MetaObject::ABSTRACT, STEPCORE_SUPER_CLASS(Object), STEPCORE_PROPERTY_RW(double, toleranceAbs, QT_TRANSLATE_NOOP("PropertyName","toleranceAbs"), STEPCORE_UNITS_1, QT_TR_NOOP("Allowed absolute tolerance"), toleranceAbs, setToleranceAbs) STEPCORE_PROPERTY_R_D(double, localError, QT_TRANSLATE_NOOP("PropertyName","localError"), STEPCORE_UNITS_1, QT_TR_NOOP("Maximal local error during last step"), localError)) STEPCORE_META_OBJECT(GJKCollisionSolver
StepCore::Vector2dList
std::vector< Vector2d, Eigen::aligned_allocator< Vector2d > > Vector2dList
Definition: types.h:117
StepCore::MetaProperty
Meta-information about property.
Definition: object.h:77
StepCore::ObjectErrors::owner
Item * owner() const
Get the owner of ObjectErrors.
Definition: world.h:58
StepCore::RigidBodyErrors::_torqueVariance
double _torqueVariance
Definition: rigidbody.h:133
StepCore::RigidBody::setKineticEnergy
void setKineticEnergy(double kineticEnergy)
Set kinetic energy of the body (will modify only velocity and (possibly) angularVelocity) ...
Definition: rigidbody.cc:329
StepCore::RigidBody::vectorWorldToLocal
Vector2d vectorWorldToLocal(const Vector2d &v) const
Translate world vector to local vector on body.
Definition: rigidbody.cc:225
StepCore::VectorXd
Eigen::VectorXd VectorXd
Definition: vector.h:38
StepCore::RigidBodyErrors::forceVariance
const Vector2d & forceVariance() const
Get force variance.
Definition: rigidbody.h:81
StepCore::square
T square(T v)
Definition: util.h:30
StepCore::Box::Box
Box(Vector2d position=Vector2d::Zero(), double angle=0, Vector2d velocity=Vector2d::Zero(), double angularVelocity=0, double mass=1, double inertia=1, Vector2d size=Vector2d(1, 1))
Constructs Box.
Definition: rigidbody.cc:341
StepCore::RigidBody::getInverseMass
void getInverseMass(VectorXd *inverseMass, DynSparseRowMatrix *variance, int offset)
Get inverse mass and (possibly) its variance matrixes.
Definition: rigidbody.cc:313
StepCore::RigidBody::rigidBodyErrors
RigidBodyErrors * rigidBodyErrors()
Get (and possibly create) RigidBodyErrors object.
Definition: rigidbody.h:261
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