У меня есть объект типа 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, с использованием ускорения как скорости.
Что я сделал не так?
Почему вы не имеете компонент времени в положении и скорости обновления? – GMichael
Что будет дальше. – user6245072
Ваш класс Vector не крут. Он имеет x, y, a, l как общедоступный. Кроме того, параметры передаются операторам по значению (обычно это константа ref X & operator + = (const X & rhs)). Вы можете попытаться изменить подписи операторов. Также вы можете попробовать отладить код – Unick