【发布时间】:2014-05-27 00:03:12
【问题描述】:
我正在尝试在Vector2(点)周围的指定半径内生成星云。
目前我正在使用此代码
public static Vector2 GeneratePosition(Vector2 position, float radius)
{
float X = GenerateScaleFloat() * (GenerateInt(2) == 1 ? 1 : -1);
float Y = GenerateInt((int)(radius * -(1 - Math.Abs(X))),
(int)(radius * (1 - Math.Abs(X)))) / radius;
X *= radius;
Y *= radius;
return new Vector2(X, Y);
}
这给了我这个结果:
(原点:0;0,半径:300,粒子:5000)
在我看来,我的代码正在生成一个旋转的正方形。我怎样才能让它在更圆形的图案中(和之内)生成粒子的位置?
GenerateScaleFloat:返回一个介于 0.0 和 1.0 之间的值
GenerateInt:标准的rand.Next
编辑: 这篇文章现在已被标记为重复,这不是我的意图。但是,我会在这里留下我的答案,让其他谷歌用户找到,因为我知道它有多大帮助:
新代码:
public static Vector2 GeneratePosition(Vector2 position, float radius)
{
float X = GenerateScaleFloat() * (GenerateInt(2) == 1 ? 1 : -1) * radius;
float Y = float.PositiveInfinity;
while(Y > Math.Sqrt(Math.Pow(radius, 2) - Math.Pow(X, 2))
|| Y < -Math.Sqrt(Math.Pow(radius, 2) - Math.Pow(X, 2)))
{
Y = GenerateScaleFloat() * (GenerateInt(2) == 1 ? 1 : -1) * radius;
}
return new Vector2(X, Y) + position;
}
新输出:(原点:0;0,半径 100,粒子:5000)
希望它能帮助别人
【问题讨论】:
标签: c# windows math xna monogame