線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1054
推到 Plurk!
推到 Facebook!

兩個矩行的中心畫線問題,應該有解只是小弟笨.請教!

 
kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-09-11 03:56:56 IP:61.229.xxx.xxx 未訂閱

各位好,我先說出我的目的,我想畫像打電話般的圖,兩個電話節點(各是一個已知位置與大小的矩形),我的問題是要在兩個矩形的中心點連線後以等距畫平行線(假設是10Pixel),一條代表打進,一條代表打出,哈,平行線我想破頭中於都OK了,現有兩點問題請教數學不錯的人.


假設:


1.框一坐標(100,100, 300, 200),框二坐標(400, 250, 500, 350),現由框一內一點(x1,y1),畫向框二內一點(x2, y2),請問 (x1, y1) 與框一的交點坐標與(x2, y2)與框二的交點坐標各為何?


2.如果我要指定在與方框的交點上,畫上一個箭頭來表示方向,請問要怎麼畫與怎麼計算?FloodFill??這箭頭是實心的等腰三角型.


可否請數學好的指導一下,感激不盡,小弟數學不太好.


kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-09-11 05:13:03 IP:61.229.xxx.xxx 未訂閱

問題只剩下箭頭沒法解,請問,如果給兩個點,連線後,兩端畫兩個箭頭,這要怎麼畫比較有效率?請高手指點,謝謝!

kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-09-11 07:26:32 IP:61.229.xxx.xxx 未訂閱

小弟有答案了,也寫出來改大家參考.

FromPoint 是起點, ToPoint 是終點
Arrow1Point 是箭頭中的一條線
Arrow2Point 是箭頭中的另一條線

以上四個 Point 就是 TPoint


程式如下.

double D;
int ARROWLEN = 8;

D = sqrt((ToPoint.y - FromPoint.y) * (ToPoint.y - FromPoint.y) (ToPoint.x - FromPoint.x) * (ToPoint.x - FromPoint.x));
if(D > 0){
Arrow1Point.x = ToPoint.x ARROWLEN * ((FromPoint.x - ToPoint.x) (FromPoint.y - ToPoint.y) / 3) / D;
Arrow1Point.y = ToPoint.y ARROWLEN * ((FromPoint.y - ToPoint.y) - (FromPoint.x - ToPoint.x) / 3) / D;
Arrow2Point.x = ToPoint.x ARROWLEN * ((FromPoint.x - ToPoint.x) - (FromPoint.y - ToPoint.y) / 3) / D;
Arrow2Point.y = ToPoint.y ARROWLEN * ((FromPoint.y - ToPoint.y) (FromPoint.x - ToPoint.x) / 3) / D;
}


canvas->Pen->Width = 1;
canvas->Pen->Style = psSolid;
canvas->LineTo(ToPoint.x, ToPoint.y);
canvas->Pen->Width = 2;
canvas->Pen->Style = psSolid;
canvas->Pen->Color = clBlack;
canvas->MoveTo(ToPoint.x, ToPoint.y);
canvas->LineTo(Arrow1Point.x, Arrow1Point.y);
canvas->LineTo(ToPoint.x, ToPoint.y);
canvas->LineTo(Arrow2Point.x, Arrow2Point.y);


說明:

ARROWLEN 是你要箭頭的線長,而計算 Arrow1Point 與 Arrow2Point 式中 /3 的 3,是控制箭頭的角度, /2 的角度較大, /3角度較小,當然 /4更小嘍!

kenlee1109
初階會員


發表:20
回覆:40
積分:27
註冊:2006-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-09-11 07:28:21 IP:61.229.xxx.xxx 未訂閱

小弟有答案了,也寫出來改大家參考.

FromPoint 是起點, ToPoint 是終點
Arrow1Point 是箭頭中的一條線
Arrow2Point 是箭頭中的另一條線

以上四個 Point 就是 TPoint


程式如下.

double D;
int ARROWLEN = 8;

D = sqrt((ToPoint.y - FromPoint.y) * (ToPoint.y - FromPoint.y) (ToPoint.x - FromPoint.x) * (ToPoint.x - FromPoint.x));
if(D > 0){
Arrow1Point.x = ToPoint.x ARROWLEN * ((FromPoint.x - ToPoint.x) (FromPoint.y - ToPoint.y) / 3) / D;
Arrow1Point.y = ToPoint.y ARROWLEN * ((FromPoint.y - ToPoint.y) - (FromPoint.x - ToPoint.x) / 3) / D;
Arrow2Point.x = ToPoint.x ARROWLEN * ((FromPoint.x - ToPoint.x) - (FromPoint.y - ToPoint.y) / 3) / D;
Arrow2Point.y = ToPoint.y ARROWLEN * ((FromPoint.y - ToPoint.y) (FromPoint.x - ToPoint.x) / 3) / D;
}


canvas->Pen->Width = 1;
canvas->Pen->Style = psSolid;
canvas->MoveTo(FromPoint.x, FromPoint.y); //sorry 忘了打
canvas->LineTo(ToPoint.x, ToPoint.y);
canvas->Pen->Width = 2;
canvas->Pen->Style = psSolid;
canvas->Pen->Color = clBlack;
canvas->MoveTo(ToPoint.x, ToPoint.y);
canvas->LineTo(Arrow1Point.x, Arrow1Point.y);
canvas->LineTo(ToPoint.x, ToPoint.y);
canvas->LineTo(Arrow2Point.x, Arrow2Point.y);


說明:

ARROWLEN 是你要箭頭的線長,而計算 Arrow1Point 與 Arrow2Point 式中 /3 的 3,是控制箭頭的角度, /2 的角度較大, /3角度較小,當然 /4更小嘍!

系統時間:2024-05-06 11:49:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!