자유로운 영혼 님이 쓰신 글 :
: 한 직선의 좌표를 압니다...
: 그리고 기울기도 알고 있습니다...
: 하지만 평행선을 어떻게 그리는지 모르겠습니다...
: 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);
}
|