C && C++

적분으로 물체의 포물선 운동 묘사(C++)

힘법사 2020. 10. 17. 23:04
728x90

 0) 포물선 운동

 포물선 운동은 x 방향으로 물체가 등속도 운동을 하는 상황에서 중령에 의해 y 방향으로 등가속도 운동을 하는 물체의 운동을 말합니다.

즉 Vx(x축으로의 속도) = v0(초기속도) * t로 표현할 수 있고, Vy(y축으로의 속도) = v0(초기속도) * t + a(가속도) * t

로 x 축과 y축의 속도를 시간에 대해서 나타낼 수 있습니다.

 이 때 이 속도를 시간 구간에서 적분을 해주면 이동한 거리를 알 수있습니다. 만약 초기 위치만 주어진다면, 결론적으로 물체의 움직임을 시간마다 알아낼 수 있습니다.

 

1) 구현 코드

  함수가 여러개 있습니다. 처음부터 설명을 하겠습니다.

1. vxt(t, vx0, ax) 시간과 초기 속도 가속도를 받아 t에서의 x축으로의 속도를 계산해주는 함수입니다.

2. vyt(t, vy0, ax) 시간과 초기 속도 가속도를 받아 t에서의 y축으로의 속도를 계산해주는 함수입니다.

3. integrate_x(init,fin,dt,a,v0) : vxt를 적분해주는 함수 입니다.

4. integrate_y(init,fin,dt,a,v0) : vyt를 적분해주는 함수 입니다.

#include <iostream>
#include <fstream>


using namespace std;

float vxt(float t, float vx0,float ax) {
	return vx0 + ax * t;
}

float vyt(float t, float vy0, float ay) {
	return vy0 + ay * t;
}

float integrate_x( float init, float fin, float dt,float a, float v0) {
	float out = 0.0;
	for (float t = init; t < fin; t += dt) {
		out += vxt(t, v0,a) * dt;
	}
	return out;
}

float integrate_y(float init, float fin, float dt, float a, float v0) {
	float out = 0.0;
	for (float t = init; t < fin; t += dt) {
		out += vyt(t, v0, a) * dt;
	}
	return out;
}


int main() {
	float x0 = 0;
	float y0 = 10;
	ofstream out("motion.txt");
	for (float T = 0; T < 10; T += 0.1) {
		out << T << " " << integrate_x(0, T, 0.01, 0, 10) << " " << integrate_y(0, T, 0.01, -9.8, 30) << endl;
	}
	return 0;
}

이를 이용해서 main에서 적분을 하고 이를 txt 파일로 저장한 다음 excel로 포물선 운동을 확인할 수있습니다.

2) 결과

 공기저항이 없는 상황에서 중력가속도가 작용할 때 물체의 운동이 다음과 같이 묘사됬습니다.

그림. 포물선 운동 시각적 묘사

 

 이렇게 적분을 활용하여 C++에서 포물선 운동을 묘사했습니다. 다음에는 더 좋은 주제로 돌아오겠습니다.

728x90