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

請問如何亂數丟3點在平面上隨機移動呢

尚未結案
candc
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-12 14:48:41 IP:61.221.xxx.xxx 未訂閱
不好意思 因為我不大會 所以來請教大家 請問如何亂數丟3點在平面上隨機移動呢 請多多指教 謝謝喔 ^^
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-12 21:22:20 IP:61.224.xxx.xxx 未訂閱
candc你好, 可否請你把問題再說詳細一點, 是說要先亂數三個點在平面上, 然後再讓這三個點在平面上自己任意移動, 就是一直變換位置嗎?? 這是你的意思嗎 國泰平安
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-12 21:57:58 IP:61.224.xxx.xxx 未訂閱
如果是我猜的那樣子的話, 那這裡有一個我寫的範例,你可以參考看看, 先在Form上放三個label,和一個timer 加入以下程式碼,就會在畫面上出現0~99的亂數, 如果你timer的interval沒改的話,就是一秒變一次位置 < class="code"> void __fastcall TForm1::Timer1Timer(TObject *Sender) { randomize(); Label1->Caption=IntToStr(random(100)); Label1->Left=random(Form1->Width); Label1->Top=random(Form1->Height); Label2->Caption=IntToStr(random(100)); Label2->Left=random(Form1->Width); Label2->Top=random(Form1->Height); Label3->Caption=IntToStr(random(100)); Label3->Left=random(Form1->Width); Label3->Top=random(Form1->Height); } 國泰平安
candc
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-13 12:11:33 IP:61.221.xxx.xxx 未訂閱
很謝謝你替我解答喔 ^^ 可以再請教你一個問題嗎 就是依上面程式 是讓點每秒變換地點 那如何能讓這些點有規律的移動呢 也就是平滑的移動 ^^ 多多指教 謝謝
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-13 13:42:42 IP:61.224.xxx.xxx 未訂閱
candc你好, 如果要有規律的話,就不是random了~ 可以用迴圈來控制, 而要平行的話,就不要去改變Label的Top,只要讓left改變就行, 只要注意不要讓他跑出Form的邊界範團就好, 把之前的範例改為:    
 
int Label1_locate=1; //宣告成全域變數,記得    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   Label1_locate  ;       if(Label1_locate>=Form1->Width - Label1->Caption.Length())
      Label1_locate = 1;         //判斷是否超出Form的邊界,超出就重頭       randomize();       Label1->Caption=IntToStr(random(100));
   Label1->Left=Label1_locate;    }    
這只有對Label1做而已,其他兩個你可以自行改變, 不一定每次只左移一,可以右移,或一次移多一點~ 你如果覺得一秒太久, 可以把timer的interval設小一點,參考看看 國泰平安
candc
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-17 14:27:24 IP:61.221.xxx.xxx 未訂閱
gemi0305 你好 謝謝你為我解答 ^^ 不好意思 想再請教你 如果我不單單考慮只往右移 而是他也會上下左右移 隨機性的向上向下向左向右 不曉得我該怎麼去操作 不好意思 謝謝
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-17 15:16:38 IP:210.66.xxx.xxx 未訂閱
candc你好, 可用雙隨機變數, 以下範例參考看看:
int Label1_locateX=1;
int Label1_locateY=1;
int borderX;
int borderY;    //----------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   borderX = Form1->Width - 50;    //定義新邊界
   borderY = Form1->Height - 50;
}
//---------------------------------------------------------------    void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   int a =random(4);  //產生亂數方向
   switch(a)
   {
   case 0:
      Label1_locateY--;
      if(Label1_locateY<=0)
        Label1_locateY = borderY;
   break;       case 1:
      Label1_locateY  ;
      if(Label1_locateY>=borderY)
        Label1_locateY = 1;
   break;
   case 2:
        Label1_locateX--;
     if(Label1_locateX<=0)
        Label1_locateX = borderX;
   break;
   case 3:
     Label1_locateX  ;
     if(Label1_locateX>=borderX)
        Label1_locateX = 1;
   break;
   default:
   break;
   }              
   randomize();       Label1->Caption=IntToStr(random(100));
   Label1->Left = Label1_locateX;
   Label1->Top = Label1_locateY;
}    國泰平安  
發表人 - gemi0305 於 2003/07/17 15:18:51
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-23 10:00:07 IP:210.66.xxx.xxx 未訂閱
candc你好~    對於你的問題,是否能給些回應, 無論是否已解決了 別讓這個問題成為石沉大海,謝謝~ 國泰平安
candc
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-11 13:17:36 IP:61.218.xxx.xxx 未訂閱
gemi0305 你好 不好意思 之前想一個方法 就忘了上來看看 想再請教你呢 不好意思喔 現在從另一方向來看@@ 亂數給xy值 (x,y) 為座標值 v=t/s 每秒 t距離 可以看成一個圓 圓心為(x,y) 半徑 t 。 (x,y)移動後下一座標(x1,y1) (x1,y1)=(x,y) (Xy,Yy) Xy Yy 如何的到ㄋ @@ 知道半徑t 所以我們亂數從 0~t 決定Xy 如此可以知 Yy @@ 只是我們要讓他亂跑 所以Xy 與 Yy 值決定後有辦法讓他亂數產生正負嗎 這是我有想到的 可是老實說 我不大知道如何來實作 不好意思 可以給我點意見嗎? ^_^ 謝謝你
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-11 19:40:32 IP:61.224.xxx.xxx 未訂閱
用兩個亂數, 一個亂數用來產生正負,如 int a = random(2); a就會為隨機為0或1, 再用一個亂數來產生數值,假使說亂數產生一數值叫b 用個判斷式判斷剛剛的a, 是0就用(-1)乘上b,這樣b就會為負數, 是1就直接拿b來用。 這樣就可以達到你想要的正負亂數。 程式碼上面已有三篇非常完整的範例可參考,請自己「試著去寫」!!!!!!! 國泰平安
candc
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-08-12 13:46:05 IP:61.221.xxx.xxx 未訂閱
gemi0305 你好 謝謝囉 ^~^
系統時間:2024-09-01 12:33:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!