我正在使用Unity和C#,并希望编写一个函数,将x和y坐标作为随机点的Vector2返回到(0,0)的单位圆上。
看起来有一个函数UnityEngine.Random.insideUnitCircle();
它在单位圆内得到一个随机点,并且有UnityEngine.Random.onUnitSphere()
但是如何在单位圆上得到一个点 ?
答案 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
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));
}