2016-06-24 2 views
0

У меня есть объект типа ball, который является подклассом класса Particle. Этот класс состоит из трех членов position, velocity и acceleration типа Vector.Почему мой мяч использует ускорение как скорость?

На каждом кадре, когда вызывается myball.update, его скорость суммируется с положением, а ускорение суммируется со скоростью. Затем мяч нарисован на экране. В любом случае, для некоторого неясного мотива, какое значение я придаю как скорость, мяч не двигается, но он движется в неускоренном равномерном движении, если я даю значение как ускорение.

Вот мои классы Vector:

class Vector { 
    private: 
     void updateC() { 
      x = cos(a) * l; 
      y = sin(a) * l; 
     } 
     void updateT() { 
      a = atan2(y, x); 
      l = sqrt(x * x + y * y); 
     } 
    public: 
     float x = 0, y = 0; 
     float a = 0, l = 0; 
     Vector() { 

     } 
     Vector(float nx, float ny): x(nx), y(ny) { 
      updateT(); 
     } 
     void X(float nx) { 
      x = nx; 
      updateT(); 
     } 
     void Y(float ny) { 
      y = ny; 
      updateT(); 
     } 
     void A(float na) { 
      a = na; 
      updateC(); 
     } 
     void L(float nl) { 
      l = nl; 
      updateC(); 
     } 
     Vector operator +(Vector other) { 
      return Vector(x + other.x, y + other.y); 
     } 
     Vector operator -(Vector other) { 
      return Vector(x - other.x, y - other.y); 
     } 
     Vector operator *(float m) { 
      Vector result(x, y); 
      result.L(l * m); 
      return result; 
     } 
     void operator +=(Vector other) { 
      x += other.x; 
      y += other.y; 
      updateT(); 
     } 
     void operator -=(Vector other) { 
      x -= other.x; 
      y -= other.y; 
      updateT(); 
     } 
     void operator *=(float m) { 
      l *= m; 
      updateC(); 
     } 
    }; 

частиц:

class Particle { 
    public: 
     Vector position; 
     Vector velocity; 
     Vector gravity; 
     Particle() {} 
     Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(na), gravity(na) {} 
     void accelerate(Vector a) { 
      velocity += a; 
     } 
     void update() { 
      position += velocity; 
      velocity += gravity; 
     } 
}; 

И мяч:

class ball: public Particle { 
    public: 
     ball(Vector p, Vector v, Vector a): Particle(p, v, a) {} 
     void update() { 
     Particle::update(); 
      graphics.circle("fill", position.x, position.y, 10); 
     } 
}; 

Итак, как я уже говорил, если я инициализировать myball со скоростью отличный от 0, мяч все равно не будет двигаться, но он будет двигаться, если я инициализирую его с разгоном разгона рента, чем 0, с использованием ускорения как скорости.

Что я сделал не так?

+0

Почему вы не имеете компонент времени в положении и скорости обновления? – GMichael

+0

Что будет дальше. – user6245072

+1

Ваш класс Vector не крут. Он имеет x, y, a, l как общедоступный. Кроме того, параметры передаются операторам по значению (обычно это константа ref X & operator + = (const X & rhs)). Вы можете попытаться изменить подписи операторов. Также вы можете попробовать отладить код – Unick

ответ

3

У вас есть опечатка в конструктор частиц:

Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(na), gravity(na) {} 

Оно должно быть:

Particle(Vector np, Vector nv = Vector(0, 0), Vector na = Vector(0, 0)): position(np), velocity(nv), gravity(na) {} 
+0

Я имею в виду опечатку. Вы писали 'speed (na)' вместо 'velocity (nv)' – GMichael

+0

https://youtu.be/5JamMWk9D68 Я знал, что это было так просто, но не могло его распознать. Большое спасибо. – user6245072

Смежные вопросы