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
[47807] Re:RoundRect기본 원리를 알고싶습니다.
[] 1262 읽음    2007-01-19 00:06
착한아들 님이 쓰신 글 :
: 안녕하세요.
: 다름이 아니라 RoundRect의 Round된 부분을
: 삼각함수를 이용해서 그릴려구 하는데
: Round가 매치가 안되더군요..
: 혹시 RoundRect 기본 알고리즘이라든지...소스면 더 좋구요~ *^^*;
: 추천 싸이트 부탁드립니당.

중요한 것은 모서리 네 곳에 타원으로 둥그렇게 처리하는 부분인데 RoundRect의 X3,Y3가 나타내는 것은 좌표가 아니라 각각 타원의 폭과 높이고 각 모서리에 그려야 하는 곡선은 타원의 일부인데,
왼쪽위 모서리에 그려야 하는 곡선의 타원의 중심좌표는 (X1+X3/2,Y1+Y3/2)
오른쪽위 모서리에 그려야 하는 곡선의 타원의 중심좌표는 (X2-X3/2,Y1+Y3/2)
왼쪽아래 모서리에 그려야 하는 곡선의 타원의 중심좌표는 (X1+X3/2,Y2-Y3/2)
오른쪽아래 모서리에 그려야 하는 곡선의 타원의 중심좌표는 (X2-X3/2,Y2-Y3/2)
입니다.

직사각형 안에 그릴 수 있는 가장 큰 타원을 그린다는 관점에서 생각할 때 해당하는 직사각형의 좌상과 우하 좌표:
왼쪽위 모서리 타원: (X1,Y1) , (X1+X3,Y1+Y3)
오른쪽위 모서리 타원: (X2-X3,Y1) , (X2,Y1+Y3)
왼쪽아래 모서리 타원: (X1,Y2-Y3) , (X1+X3,Y2)
오른쪽아래 모서리 타원: (X2-X3,Y2-Y3) , (X2,Y2)

아래 소스가 원리를 이해하는 데 조금이라도 도움이 되었으면 합니다.

int w=200,h=200;
int ew=w/2 ,eh=w/3;
int ox,oy,ex,ey;
int i,j;
for(i=0 ;i<2 ;i++){
  oy = i*(h+20)+10;
  for(j=0 ;j<2 ;j++){
   ox = j*(w+20)+10;
   Canvas->Pen->Color = clBlack;
   Canvas->RoundRect(ox,oy,ox+w,oy+h,ew,eh);
   ex = ox + (w-ew)*(j%2);
   ey = oy + (h-eh)*(i%2);
   Canvas->Pen->Color = clBlue;
   Canvas->Ellipse(ex,ey,ex+ew,ey+eh);
  }
}

+ -

관련 글 리스트
47804 RoundRect기본 원리를 알고싶습니다. 착한아들 1000 2007/01/18
47807     Re:RoundRect기본 원리를 알고싶습니다. 1262 2007/01/19
47812         Re:Re:RoundRect기본 원리를 알고싶습니다.[추가질문이요] 착한아들 894 2007/01/19
47822             Re:Re:Re:RoundRect기본 원리를 알고싶습니다.[추가질문이요] 1093 2007/01/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.