Unity 選擇具有不同概率的項

2021-10-24 03:28:52 字數 1494 閱讀 2810

假設權重分別為3,2,5

隨機乙個0-10之間的數  math.random()*10    // [0,10)  區間開閉看實際情況

數字落在[0,3),[3,5),[5,10)哪個區間就對應選擇誰

判斷落在哪個區間可以通過依次減去區間長度後是否有餘

例如隨機數為7.856:

7.856-3=4.856  說明屬於後面的區間則繼續

4.856-2=2.856  說明依舊屬於後面的區間

2.856-5<0  說明屬於該區間

例如隨機數為2.856:

2.856-3<0  說明屬於該區間

檢視文件時發現文件也有提到這個,

有時需要隨機選擇項,但有些項比其他項被選中的機率更高。例如,npc 在遇到玩家時可能會以幾種不同的方式做出反應:

可將這些不同的結果視覺化為一張紙條,該紙條分成幾個部分,每個部分佔據紙條總長度的乙個比例。佔據的比例等於選擇結果的概率。選擇行為相當於沿著紙條的長度選擇乙個隨機點(例如通過投擲飛鏢),然後檢視該點處於哪個部分。

在指令碼中,紙條實際上是乙個浮點陣列,其中的浮點數按順序包含項的不同概率。隨機點是通過將 random.value 乘以陣列中所有浮點數的總和得到的(這些數值不需要加起來等於 1;重點是不同值的相對大小)。要找到該點「位於」哪個陣列元素,首先要檢查它是否小於第乙個元素中的值。如果是,則第乙個元素便是選中的元素。否則,從該點值中減去第乙個元素的值,然後將其與第二個元素進行比較,依此類推,直到找到正確的元素。在**中表示為以下所示的內容:

//js

function choose(probs: float)

var randompoint = random.value * total;

for (i = 0; i < probs.length; i++)

return probs.length - 1;

}

//c#

float choose (float probs)

float randompoint = random.value * total;

for (int i= 0; i < probs.length; i++)

else

}return probs.length - 1;

}

請注意,最後的 return 語句是必要的,因為 random.value 可以返回 1 的結果。在這種情況下,搜尋將無法在任何地方找到隨機點。將以下行

if (randompoint < probs[i])
…更改為「小於或等於」測試將避免額外的 return 語句,但也會允許偶爾選擇某個項,即使其概率為零也是如此。

144 不同顏色的球的概率

44 有 6 種不同顏色的球,分別記為 1,2,3,4,5,6,每種球有無數個。現在取5個球,求在以下的條件下 1 5 種不同顏色,2 4 種不同顏色的球,3 3 種不同顏色的球,4 2 種不同顏色的球,它們的概率。方法一 設每種球n個,n趨向於正無窮 1 c 6,5 c n,1 c n,1 c n...

jsoup選擇具有多個class的標籤

如果 html 標籤的class 只要乙個,可以通過 document doc null doc jsoup connect timeout limittime get doc.getelementsbyclass 獲取 但是有些標籤宣告的 class 有多個,多個class 之間是通過 空格 進行...

概率統計 為什麼條件概率的結果總和直覺不同?

從前有一戶夫妻,他們生了兩個孩子。已知其中乙個是女孩,那麼另乙個孩子也是女孩的概率是多少呢?這是一道概率論課本上的經典問題,一開始的時候,很多人會覺得兩個孩子的性別是獨立事件,我們知道其中乙個孩子的性別,應該對另乙個孩子沒有影響。但實際上並不是這樣,我們可以列出兩個孩子性別的所有可能 從上面這個 裡...