Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 3963 in orxonox.OLD for orxonox/branches/particleEngine/src/lib/math


Ignore:
Timestamp:
Apr 25, 2005, 11:29:37 PM (20 years ago)
Author:
bensch
Message:

orxonox/branches/particleEngine: Vector: interface definitions

Location:
orxonox/branches/particleEngine/src/lib/math
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/particleEngine/src/lib/math/vector.cc

    r3958 r3963  
    100100*/
    101101
    102 const Vector Vector::getNormalized()
     102Vector Vector::getNormalized()
    103103{
    104104  float l = len();
     
    109109  else if(unlikely(l == 0.0))
    110110    {
    111       return Vector();
     111      return *this;
    112112    }
    113113
    114   return Vector(x / l, y /l, z / l);
     114  return *this / l;
    115115}
    116116
     
    438438   \param to to where
    439439   \param t the time this transformation should take
    440    \param res The approximation-density
    441 */
    442 void Quaternion::quatSlerp(const Quaternion* from, const Quaternion* to, float t, Quaternion* res)
     440
     441   \returns the Result of the smooth move
     442*/
     443Quaternion Quaternion::quatSlerp(const Quaternion& from, const Quaternion& to, float t)
    443444{
    444445  float tol[4];
     
    446447  DELTA = 0.2;
    447448
    448   cosom = from->v.x * to->v.x + from->v.y * to->v.y + from->v.z * to->v.z + from->w * to->w;
     449  cosom = from.v.x * to.v.x + from.v.y * to.v.y + from.v.z * to.v.z + from.w * to.w;
    449450
    450451  if( cosom < 0.0 )
    451452    {
    452453      cosom = -cosom;
    453       tol[0] = -to->v.x;
    454       tol[1] = -to->v.y;
    455       tol[2] = -to->v.z;
    456       tol[3] = -to->w;
     454      tol[0] = -to.v.x;
     455      tol[1] = -to.v.y;
     456      tol[2] = -to.v.z;
     457      tol[3] = -to.w;
    457458    }
    458459  else
    459460    {
    460       tol[0] = to->v.x;
    461       tol[1] = to->v.y;
    462       tol[2] = to->v.z;
    463       tol[3] = to->w;
     461      tol[0] = to.v.x;
     462      tol[1] = to.v.y;
     463      tol[2] = to.v.z;
     464      tol[3] = to.w;
    464465    }
    465466 
    466467  //if( (1.0 - cosom) > DELTA )
    467468  //{
    468       omega = acos(cosom);
    469       sinom = sin(omega);
    470       scale0 = sin((1.0 - t) * omega) / sinom;
    471       scale1 = sin(t * omega) / sinom;
    472       //}
    473       /*
    474   else
     469  omega = acos(cosom);
     470  sinom = sin(omega);
     471  scale0 = sin((1.0 - t) * omega) / sinom;
     472  scale1 = sin(t * omega) / sinom;
     473  //}
     474  /*
     475    else
    475476    {
    476       scale0 = 1.0 - t;
    477       scale1 = t;
     477    scale0 = 1.0 - t;
     478    scale1 = t;
    478479    }
    479       */
    480   res->v.x = scale0 * from->v.x + scale1 * tol[0];
    481   res->v.y = scale0 * from->v.y + scale1 * tol[1];
    482   res->v.z = scale0 * from->v.z + scale1 * tol[2];
    483   res->w = scale0 * from->w + scale1 * tol[3];
     480  */
     481
     482
     483  /*
     484    Quaternion res;
     485    res.v.x = scale0 * from.v.x + scale1 * tol[0];
     486    res.v.y = scale0 * from.v.y + scale1 * tol[1];
     487    res.v.z = scale0 * from.v.z + scale1 * tol[2];
     488    res.w = scale0 * from.w + scale1 * tol[3];
     489  */
     490  return Quaternion(scale0 * from.w + scale1 * tol[3],
     491                    Vector(scale0 * from.v.x + scale1 * tol[0],
     492                           scale0 * from.v.y + scale1 * tol[1],
     493                           scale0 * from.v.z + scale1 * tol[2]));
    484494}
    485495
  • orxonox/branches/particleEngine/src/lib/math/vector.h

    r3960 r3963  
    3131
    3232  inline Vector operator+ (const Vector& v) const { return Vector(x + v.x, y + v.y, z + v.z); }
    33   inline const Vector operator+= (const Vector& v) {this->x += v.x; this->y += v.y; this->z += v.z; return *this;}
     33  inline const Vector& operator+= (const Vector& v) {this->x += v.x; this->y += v.y; this->z += v.z; return *this;}
    3434  inline Vector operator- (const Vector& v) const { return Vector(x - v.x, y - v.y, z - v.z); }
    35   inline const Vector operator-= (const Vector& v) {this->x -= v.x; this->y -= v.y; this->z -= v.z; return *this;}
     35  inline const Vector& operator-= (const Vector& v) {this->x -= v.x; this->y -= v.y; this->z -= v.z; return *this;}
    3636  inline float operator* (const Vector& v) const { return x * v.x + y * v.y + z * v.z; }
    37   inline const Vector operator*= (const Vector& v) {this->x *= v.x; this->y *= v.y; this->z *= v.z; return *this;}
     37  inline const Vector& operator*= (const Vector& v) {this->x *= v.x; this->y *= v.y; this->z *= v.z; return *this;}
    3838  inline Vector operator* (float f) const { return Vector(x * f, y * f, z * f); }
    39   inline const Vector operator*= (float f) {this->x *= f; this->y *= f; this->z *= f; return *this;}
     39  inline const Vector& operator*= (float f) {this->x *= f; this->y *= f; this->z *= f; return *this;}
    4040  Vector operator/ (float f) const;
    41   inline const Vector operator/= (float f) {this->x /= f; this->y /= f; this->z /= f; return *this;}
    42   inline const Vector operator= (const Vector& v) {this->x = v.x; this->y = v.y; this->z = v.z; return *this;}
     41  inline const Vector& operator/= (float f) {this->x /= f; this->y /= f; this->z /= f; return *this;}
     42  inline const Vector& operator= (const Vector& v) {this->x = v.x; this->y = v.y; this->z = v.z; return *this;}
    4343  float dot (const Vector& v) const;
    4444  inline Vector cross (const Vector& v) const { return Vector(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x ); }
     
    5656                      z = z / l;
    5757                    }
    58   const Vector getNormalized();
     58  Vector getNormalized();
    5959  Vector abs();
    6060
     
    8282  Quaternion (float roll, float pitch, float yaw);
    8383  Quaternion operator/ (const float& f) const;
     84  inline const Quaternion operator/= (const float& f) {*this = *this / f; return *this;}
    8485  Quaternion operator* (const float& f) const;
     86  inline const Quaternion operator*= (const float& f) {*this = *this * f; return *this;}
    8587  Quaternion operator* (const Quaternion& q) const;
     88  inline const Quaternion operator*= (const Quaternion& q) {*this = *this * q; return *this;}
    8689  inline Quaternion operator+ (const Quaternion& q) const { return Quaternion(q.v + v, q.w + w); }
     90  inline const Quaternion& operator+= (const Quaternion& q) {this->v += q.v; this->w += q.w; return *this;}
    8791  inline Quaternion operator- (const Quaternion& q) const { return Quaternion(q.v - v, q.w - w); }
     92  inline const Quaternion& operator-= (const Quaternion& q) {this->v -= q.v; this->w -= q.w; return *this;}
    8893  inline Quaternion operator= (const Quaternion& q) {this->v = q.v; this->w = q.w; return *this;}
    8994  Quaternion conjugate () const {  Quaternion r(*this);
     
    9499  float norm () const;
    95100  void matrix (float m[4][4]) const;
    96   void quatSlerp(const Quaternion* from, const Quaternion* to, const float t, Quaternion* res);
     101  Quaternion quatSlerp(const Quaternion& from, const Quaternion& to, float t);
    97102 
    98103  void debug();
Note: See TracChangeset for help on using the changeset viewer.