간혹 벡터(vector)를 라디안으로 변환하거나, 라디안(radian) 값을 각도(angle, degree)로 변환해야 하는 경우들이 생긴다. 간단한 코드지만, 매번 구현하는 것 보다 유틸리티 코드로 구현해 놓고 사용하면 꽤 편하다.

 

//벡터를 각도로 변환
public static double VectorToDegree(Vector2 vector)
{
    double radian = Math.Atan2(vector.y, vector.x);
    return (radian*180.0/Math.PI);
}

//벡터를 라디안으로 변환
public static double VectorToRadian(Vector2 vector)
{
    return Math.Atan2(vector.y, vector.x);
}

//라디안을 각도로 변환
public static double RadianToDegree(double radian)
{
    return (radian * 180.0 / Math.PI);
}

//각도를 라디안으로 변환
public static double DegreeToRadian(double degree)
{
    return (Math.PI / 180.0) * degree;
}

 

 

아래 코드는 좌표를 월드좌표계 또는 로컬좌표계에서 회전시키는 코드이다

float x,y;

//월드좌표로 회전
public void RotateWorld(double angle)
{
    double radian = Util.DegreeToRadian(angle);
    x = (float)(x*Math.Cos(radian) - y*Math.Sin(radian));
    y = (float)(x*Math.Sin(radian) + y*Math.Cos(radian));
}

//로컬좌표로 회전
public void RotateLocal(double angle, jdVector2 center)
{
    Translate(center*-1);
    RotateWorld(angle);
    Translate(center);
}

 

위 코드도 게임 상 간혹 쓰이는 것이니 알아두면 좋다.

끝!!

이세계 용병 온라인

댓글을 달아 주세요