래빗 님이 쓰신 글 :
: 원점에 대해 임의의 점 x,y를 반시계방향으로 세타(임의이 각도)만큼
: 이동 시키는 방법좀 갈켜주세요;;;
: 도저히 모르겠네요;;;
입력값인 theta는 도 단위 기준입니다. d2r이 디그리 -> 라디안으로 바꿉니다.
// 도(degree)를 라디안(radian)으로
double d2r(double deg)
{
const double d2r_ratio = M_PI / 180.0; // M_PI는 math.h에 정의된 pi값입니다. (3.141592)
double rad = deg * d2r_ratio;
return rad;
}
// TPoint 는 (x, y)의 두개의 정수로 구성되어있습니다.
TPoint Rotate(double theta, TPoint Centerp, TPoint In)
{
double beta = d2r(theta);
double CosT = cos(beta);
double SinT = sin(beta);
double Diffx = In.x - Centerp.x;
double Diffy = In.y - Centerp.y;
TPoint Out;
Out.x = (int)(CosT*Diffx - SinT*Diffy + Centerp.x + 0.5); // 픽셀 단위라서 int로 캐스팅시 반올림합니다.
Out.y = (int)(SinT*Diffx + CosT*Diffy + Centerp.y + 0.5); // 픽셀 단위라서 int로 캐스팅시 반올림합니다.
return Out; // 회전된 점의 좌표(x, y)가 리턴됩니다.
}
|