【发布时间】:2014-12-30 06:08:33
【问题描述】:
我正在尝试生成一组点(由 Vector 结构表示)大致模拟一个螺旋星系。
我一直在玩的 C# 代码如下;但我似乎只能让它生成银河系的一个“手臂”。
public Vector3[] GenerateArm(int numOfStars, int numOfArms, float rotation)
{
Vector3[] result = new Vector3[numOfStars];
Random r = new Random();
float fArmAngle = (float)((360 / numOfArms) % 360);
float fAngularSpread = 180 / (numOfArms * 2);
for (int i = 0; i < numOfStars; i++)
{
float fR = (float)r.NextDouble() * 64.0f;
float fQ = ((float)r.NextDouble() * fAngularSpread) * 1;
float fK = 1;
float fA = ((float)r.NextDouble() % numOfArms) * fArmAngle;
float fX = fR * (float)Math.Cos((MathHelper.DegreesToRadians(fA + fR * fK + fQ)));
float fY = fR * (float)Math.Sin((MathHelper.DegreesToRadians(fA + fR * fK + fQ)));
float resultX = (float)(fX * Math.Cos(rotation) - fY * Math.Sin(rotation));
float resultY = (float)(fY * Math.Cos(rotation) - fX * Math.Sin(rotation));
result[i] = new Vector3(resultX, resultY, 1.0f);
}
return result;
}
【问题讨论】:
-
看起来您需要基于 numOfArms 的第二个循环,并通过手臂之间的角距离偏移手臂角度。然后将您的内部迭代循环更改为 numOfStars / numOfArms。
-
这不属于gamedev吗?
-
这并不能完全解决问题,但“度数到弧度”函数的意义何在?为什么不首先以弧度生成角度?
-
公平评论。我会试试的。