개인 프로젝트를 진행하다가 원을 그려야할 일이 생겨서 삼각함수를 이용하였다. 

후에 누군가에게 도움이 될 수 있으면 좋겠다는 생각으로 한번 정리해본다.




설명

원을 그리고 싶다는 것은 위 그림에서 θ가 0일때부터 360일때 까지의 점 p를 알고 싶다는 말과 같다.

각 앵글값일때의 점p는 위에서 나온 공식

sin(θ) = y / d   ==  y = sin(θ) * d  

cos(θ) = x / d   ==  x = cos(θ) * d

으로 구할 수있다.

다만 구해진 원은 d값을 반지름으로 하는 원일 것이다. 

또 C++에서 구현할때에는 앵글값을 0 ~ 360 까지 사용하는 것이 아니라 라디안으로 변환한 값을 사용해야한다.


코드는 아래와 같다.

1
2
3
4
5
6
7
8
for (int angle = 0; angle <= 360; angle++)
{
    // getPosition을 더한 것은 현재 오브젝트 위치에서 그리기 위함이다.
    int x = (cos(CC_DEGREES_TO_RADIANS(angle)) * m_fBoundingRadius) + getPosition().x;
    int y = (sin(CC_DEGREES_TO_RADIANS(angle)) * m_fBoundingRadius) + getPosition().y;
    // 구한 점과 오브젝트 포지션의 점을 이어주는 선을 그린다.
    DrawDebugLine(getPosition(), Point(x, y));
}
cs


'All > Algorithm' 카테고리의 다른 글

큰 수 구하기  (0) 2016.03.15
자동적에이전트 - Arrive  (0) 2016.02.22
자동적에이전트 - Flee  (0) 2016.02.21
피벗설정에 따른 퀵정렬의 속도  (0) 2016.01.18
자동적에이전트 - Seek  (0) 2016.01.17

+ Recent posts