簡體   English   中英

如何在 3D 平面中獲得隨機點

[英]How do you get a random point in a 3D plane

我需要在飛機上隨機取一個點。 假設我們有一個四邊形並且知道組成它的四個頂點的位置。 如何獲得該四邊形內的隨機點?

給定一個四邊形:

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();
}

如果你假設凸性,你可以這樣做:

// 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 的框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM