Я создаю небольшой физический движок, который запускает снаряд с заданной скоростью, скоростью и временем силы тяжести и отслеживает и отображает векторы скорости/положения на каждом временном интервале.3D-снаряды - просчет на X и Z?
В настоящий момент, когда я запускаю свою программу, мои координаты y
прекрасно меняются. Однако мои координаты x
и z
действуют одинаково, и я уверен, что мои координаты координат z
неверны. (Но я мог ошибаться)
Эта проблема одинакова для векторов положения и скорости на оси x
и z
.
Вот мой код:
include <iostream>
using namespace std;
struct velocityVector {
float vx = 10.0;
float vy = 14.14;
float vz = 10.0;
};
struct gravityVector {
float gx = 0.0;
float gy = -9.81;
float gz = 0.0;
};
struct positionVector {
float px = 0;
float py = 0;
float pz = 0;
};
int main() {
float deltaT = 0.01;
positionVector posAccess; // object for positionVectors
gravityVector gravAccess; // object for gravityVectors
velocityVector velAccess; // object for velocityVectors
while (deltaT < 1) {
deltaT += 0.01; // increment deltaT
cout << "Velocity vector = ";
// Display Velocity x,y,z
cout << velAccess.vx << " ";
cout << velAccess.vy << " ";
cout << velAccess.vz << " ";
cout << '\n';
cout << "Position vector = ";
// Display Position x,y,z
cout << posAccess.px << " ";
cout << posAccess.py << " ";
cout << posAccess.pz << " ";
cout << '\n' << endl;
// Update Velocity
velAccess.vx += deltaT * gravAccess.gx;
velAccess.vy += deltaT * gravAccess.gy;
velAccess.vz += deltaT * gravAccess.gz;
// Update Position
posAccess.px += deltaT * velAccess.vx;
posAccess.py += deltaT * velAccess.vy;
posAccess.pz += deltaT * velAccess.vz;
getchar(); // so I can go through each interval manually
}
}
Если это помогает. Вот моя задача:
Траектория в 3D снарядом, который имеет скорость запуска вектор (10.0,14.14, - 10,0). Шаг времени = 0,01 секунды. Вектор силы тяжести равен (0,0, -9,81, 0,0).
Показать позиции векторов и векторов скорости на пульте демонстрации.
Почему в результате возникает подозрение? – user2864740
В вашей задаче указано, что скорость Z должна быть -10.0, но ваш код имеет 10,0 (и, следовательно, он действует так же, как скорость 10,0 Х). – TheUndeadFish