我需要在飛機上隨機取一個點。假設我們有一個四邊形并且知道組成它的四個頂點的位置。如何獲得該四邊形內的隨機點?
uj5u.com熱心網友回復:
給定一個四邊形:
pD ---- pC
| |
| |
| |
pA ---- pB
您可以通過在該歸一化正方形內獲取一個隨機點并使用 A-to-B 和 A-to-D 向量作為坐標基礎來獲得一個隨機點。
在實踐中:
// gets a value between 0.0 and 1.0
float randomVal();
vec3 point_in_quad(vec3 pA, vec3 pB, vec3 pC, vec3 pD) {
return pA (pB - pA) * randomVal() (pD - pA) * randomVal();
}
uj5u.com熱心網友回復:
如果你假設凸性,你可以這樣做:
// gets a value between 0.0 and 1.0
float randomVal();
vec3 point_in_quad(vec3 pA, vec3 pB, vec3 pC, vec3 pD)
{
vec3 ab = pA (pB - pA) * randomVal();
vec3 dc = pD (pC - pD) * randomVal();
vec3 r = ab (dc - ab) * randomVal();
return r;
}
基本上,選擇兩個隨機點。AB 一張,CD 一張。然后在這兩者之間隨機選擇一個點。
歸功于 @frank 的框架。
對于四邊形上的均勻隨機點,請參見:
平行四邊形內的隨機點
這個問題名字不好。答案適用于任何四邊形。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417721.html
標籤:
