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
[54272] Re:몇가지 궁금증이 있습니다 canvas에 선, 사각형 그리는 내용.
둘리 [dooly386] 2092 읽음    2008-08-08 11:36
3가지를 물어 오셨군요..
----------------------------------------------------------------------------
1. Line의 끝이 직각이 되도록  물론 GDI 에서 이겠죠??

이는 Pen의 끝부분 즉 EndCap 을 정하는 문제 입니다. Canvas 자체에는 이런 기능이 없습니다. 뭐.. 앞으로 있을지 모르지만............
일단 이문제를 처리하시려면 두가지 방법이 있습니다. 하나는 GDI+ 를 사용하는것 이고(별로 않좋음)
하른 하나는 ExtCreatePen(...) 을 이용하는 방법 입니다.  ExtCreatePen API 함수는 펜의 EndCap을 설정할 수 있습니다.

HPEN hPen = ExtCreatePen(PS_GEOMETRIC | dwPenStyle[i] | PS_ENDCAP_FLAT,
                                    10, &lb, 0, NULL);

뭐.. 이런식이 될것 같습니다.

----------------------------------------------------------------------------
2. 펜 두께에 의한 문제..

이문제는 사각형 뿐만 아니라 선에도 나타나는 문제 입니다.
화면의 픽셀은 정수개 입니다. 그런데  두께라는 것은 선의 중심으로 해서 벡터적으로 평행한 위치의 점들의 집합이죠.
그런데 중심이 있으니까 양쪽으로 반씩 나줘줘야 하는데.. 이게 두께가 홀수이면 양쪽이 균형을 이루지만 짝수이면 문제가 되죠.
두께 3이면 중심을 기준으로 양쪽으로 1씩 넓혀 지는 것이지만..
두께 4면 중심을 어디에 둬야 되죠?   중심이 2 와 3 사이.. 즉 2.5 죠.. 수학에서는 2가 반이지만.. 그건 0 이 있기 때문이지만.. 화면에서는 그렇지 못하죠..  두께가 1부터 있고 , 또한 실수가 없으니까요..
즉 보정을 해줘야 되는 문제가 있습니다. 짝수이면 두께를 1 키운다든지.. 1 줄인다든지해서요..

----------------------------------------------------------------------------
3. 시작점과 각도에 의한 작도
질문하신 내용으로는 절대 선을 그릴수 없습니다. 여기서 좌표계의 문제가 발생하는데요.. 시작점과 각도 와 길이(거리)가 있어야 합니다.. 조건에 640*480 크기 안에서 그리신다고 했지만.. 이것이 애매한것이 결국 4각형 윈도우 클리핑을 해야 좌표가 나오는것이죠.. 그것도 사각형의 모서리에 있는 점을요...

어쨌든.. 화면 좌표계는 2차원 직각 좌표계 이므로 가지고 계신 정보(점과 각도) 를 직각 좌표계로 변환하는 변환식이 필요하실 것 입니다. 이 변환식이야 삼각함수를 사용하실 수 있을 것 입니다. 아니면 길이를 알면 직각 삼각형의 변의 길이 비율을 이용하셔서 계산 하셔도 됩니다.

직각 삼각형에서 왼쪽 각도 A 일경우 cos(A) = 밑변의 길이/빗변의 길이  이므로 밑변의 길이는 = cos(A)*빗변
이 되겠죠..
그리고 밑변의 길이는 원하시는 좌표의 x 좌표가 될 것이고요..

이런식으로 구하시면 될 듯 합니다.

수고하세요~~~~~~~~~





궁금증 님이 쓰신 글 :
: 안녕하세요.. 빌더 2주차 초보입니다.
:
: 현재 여러가지 모형을 canvas에 그려야 하는데 pixel 단위로 표현해야 해서
:
: 코딩 도중 해결이 잘 안되는 부분 몇가지 질문 올립니다. 꼭 답변 부탁드립니다 (__)
:                                                                                                 
: 1. 라인을 그릴때 width 를 높이면 끝 부분이 뭉그러져 있습니다. (===   (굵은 선이라 생각해 주세요 -_-)  이런 식으로요;;
:
: 검색해보니 사각형을 쓰라는 답변이 있었는데.. 정확하게 끝부분이 직각 [====  으로 표현하고  싶은데 방법이 없네요; 
:
:
: 2. 사각형의 펜 굵기를 굵게하면 좀 이상해집니다. 아니 선 굵기가 이상하다고 생각해야 하는지..
:
: 선을 그리는 원리를 이해잘 못해서 그런데 펜의 굵기가 굵어지면 사각형의 외곽선이 동일하게 안쪽으로 굵어지는게 아니라 각각의 사각형 윗선 아랫선의 굵기가 다릅니다. 홀수일땐 아래쪽이 굵어지고 짝수일땐 윗 부분이 굵어지고..
:
: 뭐 이런식으로요.. 선을 그릴때 문제가 있는거 같은데.. 이 문제때문에 사각형을 못쓰고 선으로 일일이 그려줘야 합니다. 근데 선 끝도 둥글어서 -_-

: 요는 가로줄을 그리려 moveTo (0,0) LineTo (10,0)
: 을 했을때 펜 굵기가 10이면  다음 선은 moveTo( 0,10) Lineto (10,10) 으로 해도 연결이 안되는 것에 있습니다.
: 선이 어떤 기준으로 그려지는지 설명 좀 부탁드립니다.
:
: 3. 사선을 여러개 그려야 하는데 만약 640*480 크기의 도형이 있다면 그 안에 시작점과 각도를 가지고 그려야 합니다.
: 무슨 말이냐면 시작점 (0,0) 과 원하는 각도 (45도) 만을 가지고 끝점을 알아내서 선을 긋거나 도형 사이를 채우는
: 작업을 해야하는데 두개의 단서로 끝점을 알아내는 방법 부탁트려요 ㅠㅠ 간단한 예제좀 부탁드립니다 (__)
:
: 그럼 화이팅 !

+ -

관련 글 리스트
54243 몇가지 궁금증이 있습니다 canvas에 선, 사각형 그리는 내용. 궁금증 1362 2008/08/06
54272     Re:몇가지 궁금증이 있습니다 canvas에 선, 사각형 그리는 내용. 둘리 2092 2008/08/08
54304         친절한 답변 정말 감사드립니다. 궁금증 928 2008/08/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.