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

一個路徑的問題

尚未結案
spaceworld1108
一般會員


發表:30
回覆:19
積分:9
註冊:2004-05-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-06 16:39:36 IP:140.118.xxx.xxx 未訂閱
請問一下 各位大大 如果我今天有4個點 A(10,10) B(-10,-10) C(-10,10) D(10,-10) 如果今天希望 能夠以順時針 方向連結成一個正方形 我要如何 做ㄋ 這問題我想了好久 還是沒辦法 是不是能夠請各位大大 幫幫我 謝謝
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-06 17:36:06 IP:211.76.xxx.xxx 未訂閱
spaceworld1108 您好:    不知道您題目的所有限制條件,所以暫時當成只有四個點且分佈在不同的象限。 我的判斷規則是: 可由任一點出發,記住其座標的符號(正:1,負:-1),利用nextSign(.)求出順時針旋轉方向,下一個座標的正負符號。 利用這符號,與座標值相乘,同號為正,異號得負,用以決定是否找到正確的點。 (nextSign(.)的原理是利用:座標旋轉的觀念,即每次轉-90度) 程式碼如下,請參考! < class="code">//順時針方向:此處假設為數學座標而非螢幕座標 void nextSign(int sign[2]) { int temp = sign[0]; sign[0] = sign[1]; sign[1] = -temp; } int pt[][2] = { {10,10}, {-10,-10}, {-10,10}, {10,-10} }; void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString result=""; int sign[2]={1,1}, found=0; while(1) { for (int k=0; k<4; k ) { if ( (sign[0]*pt[k][0])>0 && (sign[1]*pt[k][1]>0) ) // 符號相同 { found ; result.cat_printf("%d)=> (=,=)\n", found, pt[k][0], pt[k][1]); nextSign( sign ); break; } } if ( found==4 ) break; } ShowMessage(result); } //--------------------------------------------------------------------------- RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
spaceworld1108
一般會員


發表:30
回覆:19
積分:9
註冊:2004-05-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-06 21:02:44 IP:140.118.xxx.xxx 未訂閱
(1)result.cat_printf <=請問一下這指令是printf相同的指令嗎 先謝謝你的指導 (2)不好意思 我應該把條件說清楚一點 其實我的點不只有4個點 應該有多個點並以順時針連結圖形 ex 1.(10,10) 2.(5,5) 3.(-10,-10) 4.(-5,-6) 5.(-10,10) 6.(-5,6) 7.(10,-10) 8.(5,-6) 請問一下 那這樣的話是不是需要再加入判斷大小的判斷式ㄋ(對不起我知道會對你帶來困擾),不好意思 幫個忙
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-06 22:41:52 IP:211.76.xxx.xxx 未訂閱
spaceworld1108 您好:    
引言: (1)result.cat_printf <=請問一下這指令是printf相同的指令嗎 先謝謝你的指導 類似,而且會將接著印出的結果與先前的內容合在一起。 (2)不好意思 我應該把條件說清楚一點 其實我的點不只有4個點 應該有多個點並以順時針連結圖形 ex 1.(10,10) 2.(5,5) 3.(-10,-10) 4.(-5,-6) 5.(-10,10) 6.(-5,6) 7.(10,-10) 8.(5,-6) 請問一下 那這樣的話是不是需要再加入判斷大小的判斷式ㄋ(對不起我知道會對你帶來困擾),不好意思 幫個忙 如果情況如您所補充的,我的建議是: 還是一個象限接一個象限的找,只是一次將同一象限的點一起找出來。至於如何判斷是否為順時針,我目前想到的就是算出其與x軸的夾角(即化成極座標的形式),再根據這些角度值判定其順序,但如果有位於座標軸上的就必須另外判斷與計算。 nextSign(.)仍可使用,只是要在找出該象限的所有點後,再轉往下一象限。以上建議,您就自行測試看看吧!
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
spaceworld1108
一般會員


發表:30
回覆:19
積分:9
註冊:2004-05-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-07 09:48:21 IP:140.118.xxx.xxx 未訂閱
謝謝您的幫忙 我有點頭緒了
pkdemon
初階會員


發表:2
回覆:51
積分:25
註冊:2004-09-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-07 11:18:55 IP:211.22.xxx.xxx 未訂閱
spaceworld1108 你好, 就問題"順時針的方向",一群固定的點所畫出來的圖形並不唯一,依照你的判斷式來決定他的圖形,不過最後他都會是一個封閉的圖形,只要封閉的圖形就會有順時針跟逆時針的方向,至於會有幾種圖形,這個小弟就沒有辦法推算了... 以上作為參考,離題了... 發表人 - pkdemon 於 2004/10/07 16:39:22
系統時間:2024-06-26 13:22:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!