Re: [問題] 亂數取座標的問題

看板C_and_CPP (C/C++)作者 (累人啊....)時間16年前 (2009/03/29 22:38), 編輯推噓3(3012)
留言15則, 4人參與, 最新討論串2/2 (看更多)
: ┌─┬─┐ : ├─┼─┤ : └─┴─┘ : 假設這是10*10的一個座標平面圖 : 然後我要在左上和右下的位置亂數取幾個座標點 : 請大概怎麼寫會比較好,煩請知道的大大給個方向思考,謝謝 : → james732:你會用 rand() 這個函式嗎? 03/28 21:30 : 推 POSIX:限制座標變數範圍 左上類似y=(rand()%5 + 5) x=(rand()%5) 03/28 21:33 : → POSIX:右下 類似作法 03/28 21:33 : → tyc5116:那如果變個各範圍各取2點,且不重複的功能咧? 03/28 21:40 : 推 POSIX:你先搞懂rand()吧,取兩點就同樣的方式做兩次阿 @@" 03/28 21:43 : → tyc5116:大概知道意思了,謝謝兩位 03/28 21:44 如上,我以這樣的方式寫,不過會有錯,程式大概如下 class Point{...}//建立有XY座標的class class domain{...}//建立要取點的範圍的class //主程式 domain domain_a(0,0,3,4); domain domain_b(0,6,3,10);//表示該範圍左下是(0,6),右上是(3,10) Point Point_set[10];//建立陣列,存10個座標點 Point_set[i]=rand_Point(domain_b); //rand_Point副函式 srand((unsigned)time(0)); int temp_x=range.X2-range.X1; int temp_y=range.Y2-range.Y1; int x=static_cast<long>(temp_x*(rand()/RAND_MAX+1)+range.X1); int y=static_cast<long>(temp_y*(rand()/RAND_MAX+1)+range.Y1); return Point(x,y); run完的結果,所有取到的座標點都一樣,請問為什麼會這樣 那該怎麼解決呢,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28

03/29 22:40, , 1F
個人推測, rand()回傳值為int, RAND_MAX也是一個整數.
03/29 22:40, 1F

03/29 22:40, , 2F
rand()回傳值不超過RAND_MAX, 所以整數/整數都得到0.
03/29 22:40, 2F

03/29 22:41, , 3F
srand((unsigned)time(0)); 移到 main 去 不要放在那裡
03/29 22:41, 3F

03/29 22:41, , 4F
temp_x和y乘的東西always是1, 所以x與y值永遠都相同.
03/29 22:41, 4F

03/29 22:43, , 5F
有點忘了rand()到底回int還是short了, 反除出來都是0.
03/29 22:43, 5F

03/29 22:44, , 6F
"反正"<-漏字; 總之rand()或RAND_MAX轉個型成浮點數吧.
03/29 22:44, 6F

03/29 22:49, , 7F
即使轉成浮點數也一樣吶,不知道為什麼
03/29 22:49, 7F

03/29 22:55, , 8F
請問您是怎麼轉的?? code是怎麼寫的??
03/29 22:55, 8F

03/29 23:10, , 9F
((1.0*rand())/RAND_MAX)+1
03/29 23:10, 9F

03/29 23:12, , 10F
long x=static_cast<long>(temp_x*(double)rand()/
03/29 23:12, 10F

03/29 23:12, , 11F
(double)(RAND_MAX+1))+range.X1;
03/29 23:12, 11F

03/29 23:13, , 12F
第二行接在第一行
03/29 23:13, 12F

03/29 23:13, , 13F
就改變int x=.....這一行,y也是
03/29 23:13, 13F

03/29 23:15, , 14F
會隨機取到該範圍的點,但本例取10點,10點皆為同一點
03/29 23:15, 14F

03/29 23:15, , 15F
第二次執行時會取到不同的點,但一樣會取到10個相同的點
03/29 23:15, 15F
文章代碼(AID): #19puVO3G (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #19puVO3G (C_and_CPP)