gpt4 book ai didi

c# - 创建螺旋星系需要数学指导

转载 作者:行者123 更新时间:2023-11-30 16:21:40 26 4
gpt4 key购买 nike

我正在为恒星/系统创建一个由方 block 组成的旋转星系。

我已经摆弄了几天,到目前为止:

public int numberArms = 6;
public int numberStars = 1000;
public float galaxyRadius = 500f;
public int spread = 100;

float fHatRandom (float fRange)
{
float fArea = 4 * Mathf.Atan (6.0f);
float fP = fArea * Random.value;
return Mathf.Tan (fP / 4) * fRange / 6.0f;
}

float fLineRandom (float fRange)
{
float fArea = fRange * fRange / 2;
float fP = fArea * Random.value;
return fRange - Mathf.Sqrt (fRange * fRange - 2 * fP);
}
// Use this for initialization
void Start ()
{
Random.seed = 100;

int starsPerArm = numberStars / numberArms;
float fAngularSpread = spread / numberArms;
float fArmAngle = (360 / numberArms);
for (int arm = 0; arm < numberArms; arm++)
{
for (int i = 0; i < starsPerArm; i++)
{
float fR = fHatRandom (galaxyRadius);
float fQ = fLineRandom (fAngularSpread);
float fK = 1;

float fA = numberArms * (fArmAngle);

float fX = fR * Mathf.Cos (Mathf.Deg2Rad * (fA + fR * fK + fQ));
float fY = fR * Mathf.Sin (Mathf.Deg2Rad * (fA + fR * fK + fQ));

Vector3 starPos = new Vector3 (fX, fY, arm*4);
Collider[] colliders = Physics.OverlapSphere (starPos, 1);

if (colliders.Length == 0)
{
GameObject star = GameObject.CreatePrimitive (PrimitiveType.Cube);
star.transform.position = starPos;
star.transform.parent = transform;
} else
{
i--;//because they overlapped, we try again.
}
}
}
}

就目前而言,它可以很好地创建银河系的旋臂。但是正如你所看到的,我只是将 ARM 的位置设置为堆叠在其他 ARM 上,因为我终生无法弄清楚如何让它们围绕中心旋转,就此而言,我的中心似乎偏离了.

诚然,我的数学技能堪比小昆虫,并且一直在摸索着解决这个问题,有人可以帮助纠正数学问题并让 ARM /中心回到它们所属的位置吗?

最佳答案

不应该:

float fA = numberArms * (fArmAngle);

成为

float fA = arm * (fArmAngle);

只是说...

关于c# - 创建螺旋星系需要数学指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13019431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com