|
void TMainForm::Narrow(TCanvas *Plate, int deg, TColor color)
{
#define NRW_LENGTH 80
#define NRW_CENTER_X 150
#define NRW_CENTER_Y 150
#define DEG2RAD(x) M_PI*(float)(x)/180.0
TPoint points[4];
float rad;
rad=DEG2RAD(deg);
points[0]=Point( (NRW_LENGTH+5)*sin(rad) + NRW_CENTER_X , NRW_CENTER_Y- (NRW_LENGTH+5)*cos(rad) );
points[1]=Point( (NRW_LENGTH)*sin(rad-0.1) + NRW_CENTER_X , NRW_CENTER_Y- (NRW_LENGTH)*cos(rad-0.1) );
points[2]=Point((NRW_LENGTH+25)*sin(rad) + NRW_CENTER_X , NRW_CENTER_Y- (NRW_LENGTH+25)*cos(rad) );
points[3]=Point( (NRW_LENGTH)*sin(rad+0.1) + NRW_CENTER_X , NRW_CENTER_Y- (NRW_LENGTH)*cos(rad+0.1) );
Plate->Brush->Color = color;
Plate->Pen->Color = color;
Plate->Polygon(points, 3);
}
제가 나침반 만들때 쓴 함수입니다.
Narrow(Form1->Canvas, 100, clRed);
뭐 이런식으로 쓰심 될껍니다...
화살표 중심점만(NRW_CENTER)를 바꿔주고 중심에서의 길이(NRW_LENGTH)를 바꿔 주시면...
> 이런 모양의 화살표라 점이 4개입니다...
Falco 님이 쓰신 글 :
: 위에 보이는 그림처럼 라인을 긋고 끝에 화살표를 붙이고 싶어서 이렇게 한번 테스트 해 봤는데요... 위에 그린 화살표 처럼 가로면에 평행하게 그리면 화살표가 제대로 나오는데, 평행하지 않은 아래 화살표 처럼 그리는 경우에는 화살촉(?)이 라인에 따라 회전을 해 주어야 할것 같습니다.
:
: 근데, 아무리 머리를 짜내도 어떻게 그려야 할지 감이 오질 않네요.
:
: 애꿎은 "피타고라스" 만 검색을 하고 있는데, 고등 수학 사이트들을 막 찾아 다녀도 답이 안 나오는군요.
:
: 그래서 챙피를 무릅쓰고 이렇게 도움을 요청드립니다. 어떻게 그려야 할까요?
:
: 지금은 이렇게 그려 봤거든요. FirstPoint가 시작점의 TPoint이고, X, Y가 현재 좌표 입니다.
:
:
: Canvas->MoveTo(FirstPoint.x, FirstPoint.y);
: Canvas->LineTo(X, Y);
:
: Canvas->MoveTo(FirstPoint.x, FirstPoint.y);
:
: TPoint Points[3];
: Points[0] = FirstPoint;
: Points[1] = Point(FirstPoint.x + 20, FirstPoint.y + 4);
: Points[2] = Point(FirstPoint.x + 20, FirstPoint.y - 4);
:
: Canvas->Polygon(Points, 2);
:
: 이렇게 그려서 위의 그림처럼 나온상태 입니다. 경험있으시거나 수학적으로 할수 있다 하시는 분들의 도움을 요청합니다.
|