DX라이브러리2014. 12. 24. 15:58

3.5 sin 함수를 이용한 물체 이동 / 확대축소


부드러운 상하이동 또는 확대축소가 필요할 경우 sin함수를 이용하면 좋다. sin은 삼각함수의 그 sin 맞다. sin함수를 그래프로 그려보면 다음과 같다.



가로를 시간축, 세로가 y 값이라고 하면 이 곡선과 같은 부드러운 상하 이동이 가능해진다. 원주율을 PI라고 한다면 1초간 60이 증가하는 카운터(Count)를 사용한다면 아래와 같은 공식을 만들 수 있다.


sin(PI*2/60*Count)


이 식은 -1~1사이의 값을 얻을 수 있고 200을 곱하게 된다면 -200에서 200사이의 값을 구할 수 있게 된다.


예제


#include <math.h>

#include "DxLib.h"


#define PI 3.141592654f


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){

        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); 


        int Handle;

        int Count = 0;

        Handle = LoadGraph( "image/character_01.png" );



        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){


                DrawRotaGraph( 100, 240+sin(PI*2/240*Count)*200, 1.0, 0.0, Handle, TRUE ); //이미지 이동

                DrawRotaGraph( 500, 240, 1.0+sin(PI*2/120*Count)*0.5, 0.0, Handle, TRUE ); //이미지 확대 축소

                                Count++;


        }

        

        DxLib_End();

        return 0;

}


실행결과



첫번째 DrawRotaGraph는 y좌표에 sin함수를 적용하였고 두번째 DrawRotaGraph에서는 이미지의 크기에 sin함수를 적용한 결과이다. 60카운트에 1초의 계산이기 때문에 각각 4초 2초 주기로 변화한다. 또한 첫번째는 y좌표가 40~440사이에서 변화하고 있으며 두번째에서는 크기 배율에 0.5를 곱하기 때문에 0.5배에서 1.5배사이의 크기 변화를 볼 수 있다. 다음 공식을 활용하도록 하자.


sin( PI*2 / 주기 * Count ) * 진폭

Posted by 캡슐리어