一個路徑的問題 |
尚未結案
|
spaceworld1108
一般會員 發表:30 回覆:19 積分:9 註冊:2004-05-14 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
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 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
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 發送簡訊給我 |
|
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |