圆C#数学
好的…这个问题对大多数人来说都会变得复杂…我正试图找出两件事的公式,这样我就可以在一行代码中写出所有这些,并且可以想写多久就写多久圆C#数学,c#,math,geometry,trigonometry,C#,Math,Geometry,Trigonometry,好的…这个问题对大多数人来说都会变得复杂…我正试图找出两件事的公式,这样我就可以在一行代码中写出所有这些,并且可以想写多久就写多久 注释部分的公式,因此我可以通过某种方式使用比率来消除i>&&i0&&i 6&&i 20&&i 43&&i同心圆的半径为小圆直径加上整数因子的间隔 C1直径=1*((2*R)+S); C2直径=2*((2*R)+S) 要知道可以创建多少个小圆,必须计算形成黄线的角度(绿色填充)。如果采用由黄、绿和蓝线构成的三角形,则可以轻松计算该角度 cos=绿线长度/黄线长度 绿线
pointNum = (i * 1.0f) / 7;
if (i > 0 && i <= 6) //cannot divide by 0
{
angle = pointNum * Mathf.PI * 2.4f;
radius = 1.2f;
}
else if(i > 6 && i <= 20) //3.3333~
{
angle = pointNum * Mathf.PI * 1f;
radius = 2.4f;
}
else if(i > 20 && i <= 43) //2.15
{
angle = pointNum * Mathf.PI * 0.6f;
radius = 3.6f;
}
else if(i > 43 && i <= 79) //1.837209302325581
{
angle = pointNum * Mathf.PI * 0.5f;
radius = 4.8f;
}
float x = Mathf.Sin(angle) * radius;//radiusX;
float z = Mathf.Cos(angle) * radius;//radiusZ;
pos = new Vector2(x, z);
pointNum=(i*1.0f)/7;
如果(i>0&&i 6&&i 20&&i 43&&i同心圆的半径为小圆直径加上整数因子的间隔
C1直径=1*((2*R)+S);
C2直径=2*((2*R)+S)
要知道可以创建多少个小圆,必须计算形成黄线的角度(绿色填充)。如果采用由黄、绿和蓝线构成的三角形,则可以轻松计算该角度
cos=绿线长度/黄线长度
绿线长度=C1直径
黄线长度=sqrt(蓝线长度*蓝线长度+绿线长度*绿线长度)
使用余弦,您可以使用acos函数计算角度
然后你可以用360除以角度,得到圆的数目
当然不会精确,但小数部分可以分布在所有圆圈中
好吧……这两种方法我都翻译了Blau的部分答案,但是……性能已经差得多了,结果证明我的方法快了很多,所以猜测手动操作和创建范围将是我唯一的选择,谢谢大家提供的信息
void CreateConcentricCircles(int i)
{
//Method1
pointNum = (float)i / 7;
if (angleCache != pointNum * Mathf.PI)
angleCache = pointNum * Mathf.PI;
if (i > 0 && i <= 7) //cannot divide by 0
{
angle = angleCache * 2f;
radius = 1.2f;
}
else if(i > 7 && i <= 21) //3.3333~
{
angle = angleCache * 1f;
radius = 2.4f;
}
else if(i > 21 && i <= 44) //2.15
{
angle = angleCache * 0.6f;
radius = 3.6f;
}
else if(i > 44 && i <= 72) //1.837209302325581
{
angle = angleCache * 0.5f;
radius = 4.8f;
}
else if(i > 72 && i <= 103)
{
angle = angleCache * 0.45f;
radius = 6f;
}
else if(i > 103 && i <= 138)
{
angle = angleCache * 0.4f;
radius = 7.2f;
}
else if(i > 138 && i <= 151)
{
angle = angleCache * 0.37f;
radius = 8.4f;
}
float x = Mathf.Sin(angle) * radius;//radiusX;
float z = Mathf.Cos(angle) * radius;//radiusZ;
pos = new Vector2(x, z);
//Method2
/*if (i > 0 && i <= 6) //cannot divide by 0
radius = 1.2f;
else if(i > 6 && i <= 20) //3.3333~
radius = 2.4f;
else if(i > 20 && i <= 43) //2.15
radius = 3.6f;
else if(i > 43 && i <= 71) //1.837209302325581
radius = 4.8f;
else if(i > 71 && i <= 102)
radius = 6f;
else if(i > 102 && i <= 150)
radius = 7.2f;
float C1 = 1 * ((2*radius) + i);
//float C2 = 2 * ((2*radius) + i);
//what's blue line? is it C2?
float anglex = Mathf.Sin(C1) * radius;
float anglez = Mathf.Cos(C1) * radius;
pos = new Vector2(anglex, anglez);*/
}
void创建同心圆(int i)
{
//方法1
pointNum=(浮点)i/7;
if(angelcache!=pointNum*Mathf.PI)
angleCache=pointNum*Mathf.PI;
如果(i>0&&i 7&&i 21&&i 44&&i 72&&i 103&&i 138&&i 0&&i 6&&i 20&&i 43&&i 71&&i 102&&i您能描述一下您的程序实际应该做什么吗?您是基于一些i
参数创建向量的,但为什么?您可以通过pointNum来判断……这是许多点,它被7除的原因是因为,好吧,这是定义的,从尝试/错误lol开始工作。这里真正做的是…点正在被创建,就是这样。注意,不要给我一个-仅仅因为你不理解它…那根本没有意义。我在第一句话中说,它可能对大多数人来说都很复杂!你真的不需要知道编程这里你只需要知道mathI我只是觉得,如果我们知道你的最终目标是什么,我们会更好地提出解决方案。你是在尝试在向内移动的螺旋上布置点吗?有许多简单的参数方程可以给你带来美观的结果。这是当前设置的结果:我需要它o根据我在本例中感觉到的数字“i”继续.我不理解-'的原因是,如果你懂数学,你就会知道这是在不需要图像的情况下发生的,对吗?我也没有10次重复,所以甚至不能发布图像…好吧!一旦我完成了将其转换为代码,我会将其发布为编程答案版本,当然,一旦我验证了它,就会说这是答案工作!:)嗯,当转换这个的时候……2个变量对我来说是个谜,float r=1.2f;//半径增量//我是分离?!float C1=1*((2*r)+i);float C2=2*((2*r)+i);//什么是蓝线float test=C1/(Mathf.Sqrt(?*?+C1*C1));什么是分离,什么是蓝线float C1=1*((2*radius)+i);float C2=2*((2*radius)+i);//蓝线是什么?是C2吗?浮动角度=数学Acos(C1/(数学Sqrt(C2*C2+C1*C1));浮动x=数学Sin(角度)*半径;浮动z=数学Cos(角度)*radius;
现在我得到的是一条线,上面的小圆圈相互重叠。我对等式做了一些错误的处理,但我知道我基本上是对的。