Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#_Math_Geometry_Trigonometry - Fatal编程技术网

圆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=绿线长度/黄线长度 绿线

好的…这个问题对大多数人来说都会变得复杂…我正试图找出两件事的公式,这样我就可以在一行代码中写出所有这些,并且可以想写多久就写多久

  • 注释部分的公式,因此我可以通过某种方式使用比率来消除i>&&i<的需要

  • 角度2.4f、1f、0.6f和0.5f的公式(可能更精确,但……如何

  • 不需要半径方面的帮助这是1.2f的完美增量这可能是以某种方式找出其他2所需公式的一部分

    这里的数学太多了,对我来说有点复杂,我就是想不出如何把它缩小到这一点

    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;
    现在我得到的是一条线,上面的小圆圈相互重叠。我对等式做了一些错误的处理,但我知道我基本上是对的。