주어진 각도와 속도로 발사체를 발사하고 각 시간 간격에서 속도 / 위치 벡터를 추적하고 표시하는 작은 물리 엔진을 만들고 있지만 프로그램에 몇 가지 문제가 있습니다.
프로그램을 실행할 때 반복되지 않고 위치 변수가 0으로 유지됩니다. 어딘가에 수학이 잘못되었다는 것을 알고 있습니다. 어디인지 모르겠습니다.
내 프로그램은 다음과 같습니다.
#include <iostream>
using namespace std;
#define PI 3.14159265359
struct vecVariables {
float v = 0, a = -9.81;
float posNew = 0, posOld = 0;
float x, y;
float theta = 45; // our start angle is 45
float u = 20; // our start velocity is 20
};
int main() {
int deltaT = 0.01;
int test;
vecVariables vars; // creates an object for Variables to be used
while (deltaT <= 1) {
deltaT += 0.01;
vars.v = vars.u + vars.a * deltaT; // gets the velocity V
vars.posNew = vars.posOld + vars.v * deltaT; // gets position D
vars.x = vars.u * cos(vars.theta * PI / 180);
vars.y = vars.u * sin(vars.theta* PI / 180);
cout << "velocity vec = [" << vars.x << " , " << vars.y << "]" << endl; // velocity on x, y
cout << "pos = "<< vars.posNew << endl; // display position
vars.posOld = vars.posNew;
getchar();
}
}
변경 int deltaT = 0.01;
을 float deltaT = 0.01f;
하거나 double deltaT = 0.01;
. 무슨 일이 일어나고 있는지는 ".01"이 정수로 변환 될 때 잘려나가는 것입니다. 당신은 원하는 float
또는 double
사람들은 컴파일러에게 있기 때문에 정수가 아닌 값을 예상 할 수 있습니다. 지금은 정수 값을 기대하고 정수를 얻지 못하기 때문에 소수점 이하 모든 것을 제거하여 정수가되도록합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다