Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使螺旋星系臂末端密度降低的公式_C#_Unity3d_Math_Procedural Generation - Fatal编程技术网

C# 使螺旋星系臂末端密度降低的公式

C# 使螺旋星系臂末端密度降低的公式,c#,unity3d,math,procedural-generation,C#,Unity3d,Math,Procedural Generation,我想用C#在Unity 3D中制作一个螺旋星系(我使用衍生的对数螺旋)。我想将手臂末端的密度设置为低于中间的密度,但我的手臂始终是相同的密度 我想要这个: 我目前有这个结果: 我完全不知道如何做到这一点,但用于离散的值是randomOffsetXY 公共整数numArms=5; 公共浮点数armOffsetMax=0.5f; 公共浮动轮换系数=5; 公共浮动随机偏移XY=0.02f; 公共浮动百分比starincentre=5; 对于(int i=0;i否。Auto AUF距离(在我的脚本

我想用C#在Unity 3D中制作一个螺旋星系(我使用衍生的对数螺旋)。我想将手臂末端的密度设置为低于中间的密度,但我的手臂始终是相同的密度

我想要这个:

我目前有这个结果:

我完全不知道如何做到这一点,但用于离散的值是
randomOffsetXY


公共整数numArms=5;
公共浮点数armOffsetMax=0.5f;
公共浮动轮换系数=5;
公共浮动随机偏移XY=0.02f;
公共浮动百分比starincentre=5;
对于(int i=0;i
将行从

distance = Mathf.Pow (distance, PixelMath.percentStarInCentre / 100) ;
对于第二个参数大于1的对象

distance = Mathf.Pow (distance, 2f);
或者取决于你想要的效果有多夸张

distance = Mathf.Pow (distance, 5f);
如果希望中心的簇较少,则需要线性和抛物线的混合:

float pow
float distance = Random.value;
float slopeMod = 0.8f; // between 0 and 1, higher is more linear
distance = Mathf.Pow(distance, 2f) *(1-slopeMod) + distance*slopeMod;
您发布的链接说的是距离的平方:

现在它开始聚集在一起。我们可以看到银河系中清晰定义的臂,臂的中间有清晰定义的棘。在这一点上,你可能会注意到,由于我们的平方,臂的进一步区域看起来比以前更密集。让我们通过拉动所有的恒星clo来解决这个问题通过距离平方运算将恒星移向中心,就像我们刚才拉近恒星手臂的方式一样:

表示这样做将从您当前拥有的东西中获取输出:

手臂外部相对密度较低的物体,如您所需:


谢谢,经过一些搜索和帮助,我需要的函数称为“衰减”函数,但它们是不同的衰减函数,如标准函数(四次函数、线性函数等)


我是这个论坛的新成员,我不知道这是否是一个很好的答案用法,但我的衰减函数实际上是:
distance=(Mathf.Pow(distance,1f/3f)-1f)/(1-slopeMod);

看起来像是
distance=Mathf.Pow…
行应该对此负责。如果你这样做了会发生什么(距离,1.5 f);<代码> >或者可能是更好的指示符:<代码>距离=Mthf。Pow(距离,5f);< /代码>否。Auto AUF距离(在我的脚本PixelMath.NestStar in Calth/ 100)中是指中间的星体密度。我在这里找到了我的原始代码,但是我添加了一些编辑。“如果您执行
distance=Mathf.Pow(distance,1.5f);
distance=Mathf.Pow(distance,5f);
,会发生什么情况?”“没有任何变化吗?请回答问题,帮助我了解您的代码哪里出错。