대각선 이동 (함수)

정완훈·2025년 2월 7일

변수, 값, 설명

변수설명
start_x0.0캐릭터의 초기 x좌표
start_y0.0캐릭터의 초기 y좌표
angle30.0캐릭터가 이동할 각도 (오른쪽 방향이 0도)
speed200.0캐릭터의 이동 속도 (유닛/초)
total_time1.0총 이동 시간 (초)
fps60초당 프레임 수
delta_time1/60 (≈ 0.016)프레임당 시간 간격 (초)
move_count60총 이동 횟수

코드 (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;
}

1. 변수 설명

  • 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_timefps를 곱해서 계산하는데, 1초 동안 60번 위치를 업데이트한다는 의미이다.

2. 코드 설명

  • radian: cos 함수와 sin 함수는 라디안 단위로 각도를 받기 때문에, angle 변수를 라디안 단위로 변환했다.
  • for 루프: move_count만큼 반복하면서 캐릭터의 위치를 업데이트한다.
  • distance: speeddelta_time을 곱해서 프레임당 이동 거리를 계산한다.
  • move_x, move_y: distanceradian 값을 이용해서 x축과 y축으로 이동할 거리를 계산한다.
  • start_x, start_y 업데이트: 계산된 move_xmove_ystart_xstart_y에 더해서 캐릭터의 새로운 위치를 계산한다.
  • 출력: 각 프레임마다 캐릭터의 x, y 좌표를 출력한다.

3. 추가 설명

이 코드는 캐릭터의 등속도 직선 운동을 구현한 것이다. 매 프레임마다 일정한 거리를 이동하면서 위치를 업데이트하는 것이다.

만약 캐릭터의 이동 속도나 각도를 바꾸고 싶다면 해당 변수들의 값을 변경하면 된다.

실행 결과


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

0개의 댓글