C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47493] Re:[질문] 원 테두리의 좌표값을 알아내고 싶어요
k [] 9658 읽음    2006-12-20 16:41
초보 님이 쓰신 글 :
: 아날라고 시계와 비슷한데요.
:
: 360도를 특정갯수로 나눈 위치의 좌표값을 알아내고 싶어요
:
: 4개로 나눈다면 12시 3시 6시 9시 위치의 좌표가 되겠네요
:
: 더 많아 질수도 있고요.
:
: 여기저기 뒤져서 아날로그 시계소스를 찾아서 해보고 있는데 이해력이 부족해서요 답변 부탁드릴께요
: procedure TfrmMain.MakeCoordData;
: var
:   iCnt: Integer;
:   nInterval: Integer;
:   nRadius: Integer;
:   cx, cy      : real;
:   x,  y       : integer;
:   v: Integer;
: begin
:   //전체 발신번호의 갯수를 찾는다.
:   SendNumCnt := grdSend.RowCount - 1;
:
:   nRadius := 300;
:
:   iCnt := 0;
:   nInterval := 360 div SendNumCnt;
:
:   cx := frmRelation.imgBack.Width / 2;
:
:   for iCnt := 0 to SendNumCnt do
:   begin
:
:      v := iCnt;
:      x := Round(cx + cx * cos(6 * v * pi / 180));
:      y := Round(cx + cx * sin(6 * v * pi / 180));
:
:
:     grdSend.Cells[2, iCnt] := intTostr(x);
:     grdSend.Cells[3, iCnt] := intTostr(y);
:   end;
:
: end;

원은 정의에 따르면 중심으로 부터 거리가 같은 점들의 집합입니다.

원의 중심이 원점이고 Y축에 대해 시계방향으로 각이 커지는 경우,
원점을 O, 원위의 한 점을 P, P에서 Y축에 내린 수선이 Y 축과 만나는 점을 Q라고 하면 ∠OQP는 직각입니다.
따라서, ∠QOP를 Θ라고 하면 P의 좌표(x,y)는 아래와 같습니다.
x = 반지름 *  sin(Θ)
y = 반지름 *  cos(Θ)

원의 중심좌표가 (cx,cy)인 경우 위의 x,y를 그만큼 이동시킨 것과 같으므로 P의 좌표(x,y)는 아래와 같습니다.
x = cx + 반지름 *  sin(Θ)
y = cy + 반지름 *  cos(Θ)
 
위는 y 축의 위쪽으로 갈수록  y 값이 큰 경우입니다.
한편, 윈도우 표면 등에 그림을 그릴 때 달리 조치를 취하지 않으면 y축의 위쪽으로 갈수록 y 값이 작아집니다.
따라서, 이 경우에는 y값의 부호가 바뀌어야 하므로 아래와 같습니다.
x = cx + 반지름 *  sin(Θ)
y = cy - 반지름 *  cos(Θ)

한편, 원의 둘레를 N 등분하여 N개의 점을 잡는다고 하면, 각 점들은 이웃한 점과 원의 중심이 이루는 각도는 360/N입니다.
예를 들어, 원의 둘레에 12시각을 표시한다고 하면 360/12=30도입니다.

C/C++의 sin,cos 함수는 라디안 단위로 인수를 입력받습니다.
180도가 1π이므로,
라디안 = 각도*M_PI/180.0

+ -

관련 글 리스트
47479 [질문] 원 테두리의 좌표값을 알아내고 싶어요 초보 2062 2006/12/19
47493     Re:[질문] 원 테두리의 좌표값을 알아내고 싶어요 k 9658 2006/12/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.