Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 从A角移动到B角,找到最短的方向_C#_Math_Angle - Fatal编程技术网

C# 从A角移动到B角,找到最短的方向

C# 从A角移动到B角,找到最短的方向,c#,math,angle,C#,Math,Angle,我有一个角度A和一个目标角度B 角度的范围为-180到180 我希望角度A朝角度B移动X度 我面临的问题是,如果A是170,B是-170,那么增加到180,跳到-180显然更快,但是当比较角度时,我总是得到负X。因此,不是走最快的路,而是走最长的路 我希望有人能理解我的问题:) 编辑:添加代码想象一下,你是一个人,你被赋予了这个问题来解决。你会怎么做 写五到六个例子,包括“特殊”角度,如0、180、-180和接近它们的值 举出每一个例子 不难找到一个简单易懂的算法,它使用一两个条件并得出结果 特

我有一个角度A和一个目标角度B

角度的范围为-180到180

我希望角度A朝角度B移动X度

我面临的问题是,如果A是170,B是-170,那么增加到180,跳到-180显然更快,但是当比较角度时,我总是得到负X。因此,不是走最快的路,而是走最长的路

我希望有人能理解我的问题:)


编辑:添加代码

想象一下,你是一个人,你被赋予了这个问题来解决。你会怎么做

写五到六个例子,包括“特殊”角度,如0、180、-180和接近它们的值

举出每一个例子

不难找到一个简单易懂的算法,它使用一两个条件并得出结果


特别是,您只需要找到两条路径中最短的一条,因此一个好的抽象方法是找出每条路径的长度,然后比较它们并选择长度较小的路径。

计算两个角度之间的差异。如果产生的角度
x
大于180度,则使用该角度朝另一个方向行走:
360-x


如果使用从0到360的范围,则可以更轻松地计算差值。

以下是一个完整的示例:

void Main()
{
    int speed = 5;

    int angleA = 170;
    int angleB = -170;

    int antiClockwiseDistance = Math.Abs(180 - angleA) + Math.Abs(-180 - angleB);
    int clockwiseDistance = angleB - angleA;

    Console.WriteLine(clockwiseDistance);
    Console.WriteLine(antiClockwiseDistance);

    if(clockwiseDistance < antiClockwiseDistance)
    {
        angleA += speed;
    }
    else
    {
        angleA -= speed;
    }

    // TODO: Code to wrap an angle outside the range (i.e. 190 => -170)

    Console.WriteLine(angleA);
}
void Main()
{
内速度=5;
内角a=170;
int angleB=-170;
int antiClockwiseDistance=Math.Abs(180-angleA)+Math.Abs(-180-angleB);
int顺时针距离=角度B-角度A;
控制台写入线(顺时针距离);
控制台写入线(逆时针距离);
if(顺时针距离<逆时针距离)
{
角度A+=速度;
}
其他的
{
角度A-=速度;
}
//TODO:代码以在范围外包裹一个角度(即190=>-170)
控制台写入线(angleA);
}

请展示迄今为止您已经实现的代码,对已经编写的内容更容易提出修改建议:)好的,我添加了用于移动角度的公式,只是做了一点注释,因为我认为这是一个孩子的家庭作业:。。。你的问题是你的范围-如果你切换到[0..360]并做一些小的“模”魔术,问题会容易得多:)相关的:如果这在游戏(或其他图形应用程序)中使用当你需要一个物体向另一个物体旋转时,请参阅,以获得一个不涉及三角学的解决方案。好的,我添加了一个变量,如果绝对距离大于180,则为-1,并用这个变量乘以运动。所有这些都可以用了。非常感谢。
void Main()
{
    int speed = 5;

    int angleA = 170;
    int angleB = -170;

    int antiClockwiseDistance = Math.Abs(180 - angleA) + Math.Abs(-180 - angleB);
    int clockwiseDistance = angleB - angleA;

    Console.WriteLine(clockwiseDistance);
    Console.WriteLine(antiClockwiseDistance);

    if(clockwiseDistance < antiClockwiseDistance)
    {
        angleA += speed;
    }
    else
    {
        angleA -= speed;
    }

    // TODO: Code to wrap an angle outside the range (i.e. 190 => -170)

    Console.WriteLine(angleA);
}