回覆列表
-
1 # 使用者7773663133909
-
2 # 小飛飛的小朋友
#include
intmain()
{intn;//定義一個數作為行數
printf("n=");//輸出提示輸入的資訊
scanf("%d",&n);//輸入行數
for(i=0;i
#include
intmain()
{intn;//定義一個數作為行數
printf("n=");//輸出提示輸入的資訊
scanf("%d",&n);//輸入行數
for(i=0;i
我實現過隨機取任意三角形內一點的演算法:三角形三個頂點A,B,C首先:求得兩個向量ab = B - Aac = C - A。然後:使用rand()獲得兩個0~1之間的隨機實數x, y如果x+y>1, 那麼令x"=1-x, y"=1-y如果x+y<=1, 那麼令x"=x, y"=y最後:隨機點 = A + x" * ab + y‘ * ac給個影象:看到有人質疑這個演算法,我也不會用嚴謹的數學方法來證明.就發兩幅影象佐證一下吧:兩幅圖中,第一幅是正方形內隨機取點12000000次生成的影象.第二幅是三角形內隨機取點4000000次生成的影象.看上去雪破圖的感覺是一樣的.------------------------參考 @李曉生答案中的連結:uniform random point in triangle我使用這個公式P=A*(1 - sqrt(r1)) + B*sqrt(r1)*(1 - r2) + C*r2*sqrt(r1),也生成了同樣的雪破圖影象.------------------------關於均勻與隨機.舉個例子:假如你娶了3個媳婦,要做到"雨露均霑",有兩種辦法:第一種,三個輪流著來.每次嚴格按ABCABCABC...的順序,這叫均勻.第二種,每次ABC中都有1/3的機率被選中,這叫隨機.所以均勻是規則的,隨機是不規則的.對於這個問題,只能做到隨機,無法做到絕對的均勻.還有個相關的問題:隨機三維單位向量的生成演算法如何做到均勻分佈? - 葉飛影的回答