오호.. 저렇게 구할수도 있군요
멋지네요..
저도 좀 활용해야겠습니다.
이현수 님이 쓰신 글 :
: 자유로운 영혼 님이 쓰신 글 :
: : 한 직선의 좌표를 압니다...
: : 그리고 기울기도 알고 있습니다...
: : 하지만 평행선을 어떻게 그리는지 모르겠습니다...
: : 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);
: }
: |