2012-12-30 32 views
5

所以我有一個float[,]高度圖,並且作爲我的河流生成算法的一部分,我想選擇兩個點,只要它們是陣列邊緣的一部分即可。這似乎是一個簡單的任務,但我似乎無法想出一個不涉及太多if語句的解決方案。有沒有辦法從二維數組的邊緣進行選擇? (IE,x = 0x = max,或y = 0y = max如何僅在二維數組邊緣選擇點

+0

你想一個隨機點? – JasonD

+2

有多少是太多? –

+0

任何隨機點,只要它在一個邊上。 編輯:我要選擇兩個總分,如果這是相關的。 – user1938413

回答

2

你可以把所有邊緣indicies樣(0,10)一個陣列,把所有的人都在一個陣列中,現在你可以簡單地選擇一個或多個他們。

+0

有一件事與問題無關:如果將隨機範圍拉伸到數組長度的N倍,並使用模數來獲得範圍內的點,則可以隨機存檔更好的結果。我通常使用7作爲乘法器。 –

2

只是爲了新奇,這裏是做這件事的方式不涉及存儲所有的指數,或如果()塊:

static void randPoint(int width, int height, out int x, out int y, Random r) 
    { 
     int[] dim = {width,height}; 
     int[] res = new int[2]; 

     res[0] = r.Next(0, 2) * (width - 1); 
     res[1] = r.Next(0, 2) * (height - 1); 
     int hv = r.Next(0, 2); 
     res[hv] = r.Next(0,dim[hv]); 

     x = res[0]; 
     y = res[1]; 
    }