변수, 값, 설명
| 변수 | 값 | 설명 |
|---|---|---|
start_x | 0.0 | 캐릭터의 초기 x좌표 |
start_y | 0.0 | 캐릭터의 초기 y좌표 |
angle | 30.0 | 캐릭터가 이동할 각도 (오른쪽 방향이 0도) |
speed | 200.0 | 캐릭터의 이동 속도 (유닛/초) |
total_time | 1.0 | 총 이동 시간 (초) |
fps | 60 | 초당 프레임 수 |
delta_time | 1/60 (≈ 0.016) | 프레임당 시간 간격 (초) |
move_count | 60 | 총 이동 횟수 |
코드 (C++)
#include <iostream>
#include <cmath>
#define PI 3.14159265358979323846
int main() {
double start_x = 0.0; // 캐릭터의 시작 위치 (x원점)
double start_y = 0.0; // 캐릭터의 시작 위치 (y원점)
double angle = 30.0; // 이동 각도
double speed = 200.0; // 이동 속도
double total_time = 1.0; // 총 이동 시간
int fps = 60; // 프레임
double delta_time = 1.0 / fps; // 프레임당 시간 간격
int move_count = static_cast<int>(total_time * fps); // 총 이동 횟수
double radian = angle * PI / 180.0; // 각도를 라디안 변환
// 이동 계산
for (int i = 0; i < move_count; ++i) {
double distance = speed * delta_time; // 프레임당 이동 거리
double move_x = distance * cos(radian); // x축과 y축으로 이동할 거리 계산
double move_y = distance * sin(radian);
start_x += move_x; // 캐릭터의 새로운 위치 계산
start_y += move_y;
// 현재 프레임의 위치 출력
std::cout << "Frame " << i + 1 << ": x = " << start_x << ", y = " << start_y << std::endl;
}
return 0;
}
start_x, start_y: 캐릭터의 시작 위치를 나타내는 변수다. 둘 다 0.0으로 초기화했으니까 원점에서 시작한다는 의미이다.angle: 캐릭터가 이동할 각도를 나타내는 변수인데, 30도로 설정했다. 여기서 0도는 오른쪽 방향을 기준으로 헌더.speed: 캐릭터가 1초 동안 이동하는 거리를 나타내는 변수다. 200.0 유닛/초로 설정했으니까 1초에 200 유닛을 이동한다는 의미이다.total_time: 총 이동 시간을 나타내는 변수인데, 1.0초로 설정했다.fps: 1초당 프레임 수를 나타내는 변수이다. 60 FPS로 설정했으니까 1초에 60번 화면이 업데이트된다는 의미이다.delta_time: 프레임당 시간 간격을 나타내는 변수다. 1/60초로 계산되는데, 이건 1초를 60 프레임으로 나눈 값이다. 즉, 각 프레임이 얼마나의 시간을 가지는지를 나타낸다.move_count: 총 이동 횟수를 나타내는 변수다. total_time과 fps를 곱해서 계산하는데, 1초 동안 60번 위치를 업데이트한다는 의미이다.radian: cos 함수와 sin 함수는 라디안 단위로 각도를 받기 때문에, angle 변수를 라디안 단위로 변환했다.for 루프: move_count만큼 반복하면서 캐릭터의 위치를 업데이트한다.distance: speed와 delta_time을 곱해서 프레임당 이동 거리를 계산한다.move_x, move_y: distance와 radian 값을 이용해서 x축과 y축으로 이동할 거리를 계산한다.start_x, start_y 업데이트: 계산된 move_x와 move_y를 start_x와 start_y에 더해서 캐릭터의 새로운 위치를 계산한다.이 코드는 캐릭터의 등속도 직선 운동을 구현한 것이다. 매 프레임마다 일정한 거리를 이동하면서 위치를 업데이트하는 것이다.
만약 캐릭터의 이동 속도나 각도를 바꾸고 싶다면 해당 변수들의 값을 변경하면 된다.
실행 결과
Frame 2: x = 5.7735, y = 3.33333
Frame 3: x = 8.66025, y = 5
Frame 4: x = 11.547, y = 6.66667
Frame 5: x = 14.4338, y = 8.33333
Frame 6: x = 17.3205, y = 10
Frame 7: x = 20.2073, y = 11.6667
Frame 8: x = 23.094, y = 13.3333
Frame 9: x = 25.9808, y = 15
Frame 10: x = 28.8675, y = 16.6667
Frame 11: x = 31.7543, y = 18.3333
Frame 12: x = 34.641, y = 20
Frame 13: x = 37.5278, y = 21.6667
Frame 14: x = 40.4145, y = 23.3333
Frame 15: x = 43.3013, y = 25
Frame 16: x = 46.188, y = 26.6667
Frame 17: x = 49.0748, y = 28.3333
Frame 18: x = 51.9615, y = 30
Frame 19: x = 54.8483, y = 31.6667
Frame 20: x = 57.735, y = 33.3333
Frame 21: x = 60.6218, y = 35
Frame 22: x = 63.5085, y = 36.6667
Frame 23: x = 66.3953, y = 38.3333
Frame 24: x = 69.282, y = 40
Frame 25: x = 72.1688, y = 41.6667
Frame 26: x = 75.0555, y = 43.3333
Frame 27: x = 77.9423, y = 45
Frame 28: x = 80.829, y = 46.6667
Frame 29: x = 83.7158, y = 48.3333
Frame 30: x = 86.6025, y = 50
Frame 31: x = 89.4893, y = 51.6667
Frame 32: x = 92.376, y = 53.3333
Frame 33: x = 95.2628, y = 55
Frame 34: x = 98.1495, y = 56.6667
Frame 35: x = 101.036, y = 58.3333
Frame 36: x = 103.923, y = 60
Frame 37: x = 106.81, y = 61.6667
Frame 38: x = 109.697, y = 63.3333
Frame 39: x = 112.583, y = 65
Frame 40: x = 115.47, y = 66.6667
Frame 41: x = 118.357, y = 68.3333
Frame 42: x = 121.244, y = 70
Frame 43: x = 124.13, y = 71.6667
Frame 44: x = 127.017, y = 73.3333
Frame 45: x = 129.904, y = 75
Frame 46: x = 132.791, y = 76.6667
Frame 47: x = 135.677, y = 78.3333
Frame 48: x = 138.564, y = 80
Frame 49: x = 141.451, y = 81.6667
Frame 50: x = 144.338, y = 83.3333
Frame 51: x = 147.224, y = 85
Frame 52: x = 150.111, y = 86.6667
Frame 53: x = 152.998, y = 88.3333
Frame 54: x = 155.885, y = 90
Frame 55: x = 158.771, y = 91.6667
Frame 56: x = 161.658, y = 93.3333
Frame 57: x = 164.545, y = 95
Frame 58: x = 167.432, y = 96.6667
Frame 59: x = 170.318, y = 98.3333
Frame 60: x = 173.205, y = 100