3D Projectile — просчет по X & amp; 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).

Показать векторы положения и векторы скорости
на консоли для демонстрационных целей.

0

Решение

Проблема в том, что вы увеличиваете deltaT (количество времени, которое проходит с каждым физическим шагом). Это должно остаться прежним, и вы должны добавить другую переменную, чтобы отслеживать, сколько времени прошло с начала симуляции. Например:

float time = 0.0;
while (time < 1.0)  // make sure that this STAYS a float
{
// Physics code here
time += deltaT; // increment the time AFTER physics is simulated
getchar();
}

Это должно получить вам то, что вы хотите.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]