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
[60750] Re:평행선을 그리고 싶습니다.
이현수 [] 1418 읽음    2010-04-09 23:50
자유로운 영혼 님이 쓰신 글 :
: 한 직선의 좌표를 압니다...
: 그리고 기울기도 알고 있습니다...
: 하지만 평행선을 어떻게 그리는지 모르겠습니다...
: x축에 평행이거나 y축에 평행인선은 쉽게 그리지만
: 직선이 사선일 때 어떻게 구해야 하나요??
:
: 아시는 고수님들 도움좀 주세요ㅜㅜ

연구해서 작성한 건데 맞는 지 모르겠군요.
#include
void __fastcall TForm1::FormPaint(TObject *Sender)
{
 TPoint origin;
 origin.x = ClientWidth/2;
 origin.y = ClientHeight/2;
 TPoint line1[2], line2[2], line3[2];
 line1[0].x = -100;  line1[0].y = -100;
 line1[1].x =  100;  line1[1].y =  100;

//일단 좌표축을 그림
 Canvas->Pen->Style = psSolid;
 Canvas->Pen->Width = 2;
 Canvas->Pen->Color = clBlack;
 Canvas->MoveTo(0,origin.y);
 Canvas->LineTo(ClientWidth,origin.y);
 Canvas->MoveTo(origin.x,0);
 Canvas->LineTo(origin.x, ClientHeight);

// 주어진 기본 직선을 그림
 Canvas->Pen->Width = 1;
 Canvas->Pen->Color = clBlue;
 Canvas->MoveTo(origin.x+line1[0].x,origin.y-line1[0].y); // y축은 거꾸로이므로 마이너스
 Canvas->LineTo(origin.x+line1[1].x,origin.y-line1[1].y);

 //특정 직선과 평행하고 거리가 d인 직선은 두 개가 있음 (line2와 line3)
 double d = 120;
 double a = (line1[1].y - line1[0].y) / (double)(line1[1].x - line1[0].x);
 line2[0].x = line1[0].x - a*d / sqrt(a*a+1) + 0.5;
 line2[0].y = line1[0].y +   d / sqrt(a*a+1) + 0.5;
 line2[1].x = line1[1].x - a*d / sqrt(a*a+1) + 0.5;
 line2[1].y = line1[1].y +   d / sqrt(a*a+1) + 0.5;
 Canvas->Pen->Color = clFuchsia;
 Canvas->MoveTo(origin.x+line2[0].x,origin.y-line2[0].y);
 Canvas->LineTo(origin.x+line2[1].x,origin.y-line2[1].y);

 line3[0].x = line1[0].x + a*d / sqrt(a*a+1) + 0.5;
 line3[0].y = line1[0].y -   d / sqrt(a*a+1) + 0.5;
 line3[1].x = line1[1].x + a*d / sqrt(a*a+1) + 0.5;
 line3[1].y = line1[1].y -   d / sqrt(a*a+1) + 0.5;
 Canvas->Pen->Color = clFuchsia;
 Canvas->MoveTo(origin.x+line3[0].x,origin.y-line3[0].y);
 Canvas->LineTo(origin.x+line3[1].x,origin.y-line3[1].y);

//네 점이 직사각형을 이루어야 하므로, 대강 눈으로 검사해보기 위해 점선을 그려봄
 Canvas->Pen->Style = psDot;
 Canvas->Pen->Color = clBlack;
 Canvas->MoveTo(origin.x+line2[0].x,origin.y-line2[0].y);
 Canvas->LineTo(origin.x+line3[0].x,origin.y-line3[0].y);
 Canvas->MoveTo(origin.x+line2[1].x,origin.y-line2[1].y);
 Canvas->LineTo(origin.x+line3[1].x,origin.y-line3[1].y);
}

+ -

관련 글 리스트
60733 평행선을 그리고 싶습니다. 자유로운 영혼 1437 2010/04/08
60750     Re:평행선을 그리고 싶습니다. 이현수 1418 2010/04/09
60751         Re:Re:평행선을 그리고 싶습니다. 장성호 1459 2010/04/10
60734     Re:평행선을 그리고 싶습니다. 장성호 1608 2010/04/08
60742         Re:Re:평행선을 그리고 싶습니다. 자유로운 영혼 1386 2010/04/09
60743             Re:Re:Re:평행선을 그리고 싶습니다. 장성호 1527 2010/04/09
60745                 (냉무) 감사합니다~ 많은 도움이 되었습니다^^ 자유로운 영혼 1419 2010/04/09
60740         Re:Re:평행선을 그리고 싶습니다. 이길남.HoPe 1353 2010/04/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.