我正在构建一个小型物理引擎,它以给定的速度、重力速度和时间间隔发射弹丸,并在每个时间间隔跟踪和显示速度/位置矢量。
目前,当我运行我的程序时,我的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
}
}
如果有帮助。这是我的任务:
发射速度矢量为 (10.0,14.14,- 10.0) 的射弹的 3D 轨迹。时间步长 = 0.01 秒。重力矢量为 (0.0, -9.81, 0.0)。
出于演示目的,在控制台上显示位置矢量和速度矢量。