在(0,0)的单位圆圈上得到随机点

时间:2018-04-05 17:19:02

标签: c# unity3d

我正在使用Unity和C#,并希望编写一个函数,将x和y坐标作为随机点的Vector2返回到(0,0)的单位圆上。

看起来有一个函数UnityEngine.Random.insideUnitCircle();它在单位圆内得到一个随机点,并且有UnityEngine.Random.onUnitSphere()但是如何在单位圆上得到一个点

4 个答案:

答案 0 :(得分:5)

您可以使用Vector2返回的UnityEngine.Random.insideUnitCircle; normalized property。它将返回一个

的向量
  

方向相同但长度为1.0。

由于您使用的是单位圆圈,因此可以满足您的需求。你还想通过将结果默认为有效的东西来处理零向量的罕见情况:

return myVector == Vector2.zero ? Vector2.one : myVector;

答案 1 :(得分:3)

在-π和π之间生成一个随机数,并将其用作角度:

var a = UnityEngine.Random.value * (2 * Mathf.PI) - Mathf.PI;
var x = Mathf.Cos(a);
var y = Mathf.Sin(a);

答案 2 :(得分:2)

您可以通过获取随机角度轻松解决此问题,然后使用圆角半径获取坐标:

{{1}}

答案 3 :(得分:2)

简单的数学。 Polar Coordinates

创建一个随机数为double(θ)并用它来查找x,y

Polar Coordinates

Random rng = new Random();
PointF RandomOnUnitSphere(PointF center, double radius=1.0)
{
    var θ = rng.NextDouble();
    return new PointF((float)(radius * Math.Cos(θ) + center.X), 
                      (float)(radius * Math.Sin(θ) + center.Y));

}