간혹 벡터(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);
}
위 코드도 게임 상 간혹 쓰이는 것이니 알아두면 좋다.
끝!!
'게임을 만들자 > 게임 서버(C#)' 카테고리의 다른 글
c# 구글 인앱 iap 서버 검증 코드 (1) | 2021.01.08 |
---|---|
윈도우 서버 TCPNoDelay, TcpAckFrequency 설정 (1) | 2020.12.23 |
c#, 점 - 선분 간의 거리 구하기 (0) | 2020.10.13 |
c# 다각형 무게 중심 구하기 (1) | 2020.04.09 |
c# ibatis Mapper에서 <,>,<=,>= 비교연산자 사용 (0) | 2020.04.08 |