畫箭頭的問題 |
缺席
|
gemini07
一般會員 發表:29 回覆:18 積分:14 註冊:2003-04-20 發送簡訊給我 |
大家好,我現在在寫一個可以畫箭頭的函式
以下是我的函式內容,但是畫出來箭頭的方向都不是很正確
請問我這個函式要如何修正呢 //- p1, p2為構成箭頭線條的兩點
void __fastcall TForm1::DrawArrow( TCanvas* canvas, TPoint p1, TPoint p2 )
{
if( canvas == NULL )
return;
canvas->Pen->Color = clBlack;
canvas->Brush->Color = clBlack;
canvas->Brush->Style = bsSolid;
canvas->MoveTo( p1.x, p1.y );
canvas->LineTo( p2.x, p2.y ); //- 畫箭頭
double slope;
if( p2.x - p1.x == 0 )
slope = 1;
else
slope = double( p2.y - p1.y ) / ( p2.x - p1.x ); double angle = atan( slope ) * 180 / M_PI;
TPoint points[3];
points[0] = Point( p2.x, p2.y ); points[1] = Point( p2.x + (int)( (20)*cos(angle) - (5)*sin(angle) ),
p2.y + (int)( (20)*sin(angle) + (5)*cos(angle) ) );
points[2] = Point( p2.x + (int)( (20)*cos(angle) - (-5)*sin(angle) ),
p2.y + (int)( (20)*sin(angle) + (-5)*cos(angle) ) );
canvas->Polygon( points, 2 );
}
|
sew
一般會員 發表:2 回覆:54 積分:21 註冊:2003-08-25 發送簡訊給我 |
|
gemini07
一般會員 發表:29 回覆:18 積分:14 註冊:2003-04-20 發送簡訊給我 |
|
sew
一般會員 發表:2 回覆:54 積分:21 註冊:2003-08-25 發送簡訊給我 |
不好意思,公司沒有bcb可以試,只好請您再試一個
points[0] = Point( p2.x, p2.y );
points[1] = Point( p2.x + (int)( (20)*cos(angle) - (5)*sin(angle) ),
p2.y + (int)( (20)*sin(angle) + (5)*cos(angle) ) ); points[2] = Point( p2.x + (int)( (20)*cos(angle) - (-5)*sin(angle) ),
p2.y + (int)( (20)*sin(angle) + (-5)*cos(angle) ) );
部份改成
points[0] = Point( p2.x (int)( (20)*cos(angle), p2.y (int)( (20)*sin(angle) );
points[1] = Point( p2.x (int)( (20)*cos(angle) - (5)*cos(固定角度) ),
p2.y (int)( (20)*sin(angle) (5)*sin(固定角度) ) ); points[2] = Point( p2.x (int)( (20)*cos(angle) - (-5)*cos(固定角度) ),
p2.y (int)( (20)*sin(angle) (-5)*sin(固定角度) ) );
再試試囉
我想您的三個
------
加油! |
gemini07
一般會員 發表:29 回覆:18 積分:14 註冊:2003-04-20 發送簡訊給我 |
sew你好,謝謝你這麼熱心的回答,不過剛剛我發現問題的原因了
以下是我修改後的程式碼
void __fastcall TForm1::DrawArrow( TCanvas* canvas, TPoint p1, TPoint p2 )
{
if( canvas == NULL )
return; canvas->Pen->Color = clBlack;
canvas->Brush->Color = clBlack;
canvas->Brush->Style = bsSolid; canvas->MoveTo( p1.x, p1.y );
canvas->LineTo( p2.x, p2.y ); //- 畫箭頭
double slope;
if( p2.x - p1.x == 0 )
slope = 1;
else
slope = double( p2.y - p1.y ) / ( p2.x - p1.x ); -->問題出在這一行,把它改成這樣就可以了
double angle = atan( slope ); TPoint points[3];
points[0] = Point( p2.x, p2.y ); points[1] = Point( p2.x (int)( (20)*cos(angle) - (5)*sin(angle) ),
p2.y (int)( (20)*sin(angle) (5)*cos(angle) ) ); points[2] = Point( p2.x (int)( (20)*cos(angle) - (-5)*sin(angle) ),
p2.y (int)( (20)*sin(angle) (-5)*cos(angle) ) ); canvas->Polygon( points, 2 );
}
|
sew
一般會員 發表:2 回覆:54 積分:21 註冊:2003-08-25 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |