Files
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

118 lines
3.6 KiB
C#

namespace System
{
public class Beta
{
//[UnityEditor.MenuItem("Tools/TestBeta")]
//void TestBeta()
//{
// List<double> doubles = new List<double>();
// for (int i = 0; i < 10000; i++)
// {
// doubles.Add(Beta.Sample(100, 900));
// }
// doubles.Sort();
// for (int i = 0; i < doubles.Count; i++)
// {
// int s = (int)(doubles[i] * 100);
// Debug.Log(s);
// }
//}
static double GammaSampleUnchecked(System.Random rnd, double shape, double rate)
{
if (double.IsPositiveInfinity(rate))
{
return shape;
}
double num = shape;
double num2 = 1.0;
if (shape < 1.0)
{
num = shape + 1.0;
num2 = System.Math.Pow(rnd.NextDouble(), 1.0 / shape);
}
double num3 = num - 1.0 / 3.0;
double num4 = 1.0 / System.Math.Sqrt(9.0 * num3);
double num6;
double num7;
double num5;
do
{
num5 = NormalSampleUnchecked(rnd, 0.0, 1.0);
for (num6 = 1.0 + num4 * num5; num6 <= 0.0; num6 = 1.0 + num4 * num5)
{
num5 = NormalSampleUnchecked(rnd, 0.0, 1.0);
}
num6 = num6 * num6 * num6;
num7 = rnd.NextDouble();
num5 *= num5;
if (num7 < 1.0 - 0.0331 * num5 * num5)
{
return num2 * num3 * num6 / rate;
}
}
while (!(System.Math.Log(num7) < 0.5 * num5 + num3 * (1.0 - num6 + System.Math.Log(num6))));
return num2 * num3 * num6 / rate;
}
static double NormalSampleUnchecked(System.Random rnd, double mean, double stddev)
{
double x;
double y;
while (!PolarTransform(rnd.NextDouble(), rnd.NextDouble(), out x, out y))
{
}
return mean + stddev * x;
}
static bool PolarTransform(double a, double b, out double x, out double y)
{
double num = 2.0 * a - 1.0;
double num2 = 2.0 * b - 1.0;
double num3 = num * num + num2 * num2;
if (num3 >= 1.0 || num3 == 0.0)
{
x = 0.0;
y = 0.0;
return false;
}
double num4 = Math.Sqrt(-2.0 * Math.Log(num3) / num3);
x = num * num4;
y = num2 * num4;
return true;
}
public static double Sample(double alpha, double beta)
{
System.Random rng = new System.Random();
double num;
double num2;
if (alpha == beta)
{
num = GammaSampleUnchecked(rng, alpha, 1.0);
num2 = GammaSampleUnchecked(rng, beta, 1.0);
if (num == 0.0 && num2 == 0.0)
{
if (rng.NextDouble() < 0.5f)
{
return 1;
}
return 0;
}
}
else
{
do
{
num = GammaSampleUnchecked(rng, alpha, 1.0);
num2 = GammaSampleUnchecked(rng, beta, 1.0);
}
while (num == 0.0 && num2 == 0.0);
}
return num / (num + num2);
}
}
}