C++ 变量值增加而不是减少

C++ 变量值增加而不是减少,c++,math,C++,Math,我正在开发一些模拟软件,其中有一个实体围绕一个特定点旋转 随着实体开始围绕该点旋转,并且螺旋半径继续增大,我想显示实体已完成的回路数,用户完成回路的数量定义为实体从原点到达其开始旋转时的相同角度的位置/时间。 我还想向用户显示从飞机当前位置到完成当前电路点的距离 我正在使用以下代码部分执行此操作: if (m_OVF_TURN_DIR == TURN_LEFT) { arcAngle = 360 - (NormalAngle360(NormalAngle360(ldFAZ

我正在开发一些模拟软件,其中有一个实体围绕一个特定点旋转

随着实体开始围绕该点旋转,并且螺旋半径继续增大,我想显示实体已完成的回路数,用户完成回路的数量定义为实体从原点到达其开始旋转时的相同角度的位置/时间。 我还想向用户显示从飞机当前位置到完成当前电路点的距离

我正在使用以下代码部分执行此操作:

if (m_OVF_TURN_DIR == TURN_LEFT)
    {
        arcAngle = 360 - (NormalAngle360(NormalAngle360(ldFAZ_CentrePos_AC) + NormalAngle360(m_circuitStartAngle))); 
        m_SteerData.DistanceToGo = (arcAngle * PI * m_currentRadius);
    }
    else
    {
        arcAngle = 360 - (NormalAngle360(NormalAngle360(m_circuitStartAngle) + NormalAngle360(ldFAZ_CentrePos_AC))); 
        m_SteerData.DistanceToGo = ((arcAngle * PI * m_currentRadius) / 180.0); // Nm
    }
在该代码中,以下行:

m_SteerData.DistanceToGo = (arcAngle * PI * m_currentRadius);

是指计算从飞机当前位置到完成电路点的距离

当图元以逆时针方向旋转时,第一个块用于计算距离,当图元以顺时针方向旋转时,第二个块用于计算距离

顺时针方向似乎工作正常-它显示一个数字表示要走的距离,该数字随着实体沿着螺旋的路径稳步减少。然而,逆时针方向似乎从一个随机数开始,然后随着实体沿着螺旋线的路径稳步增加。。。而不是像应该的那样减少,因为实体正在向完成回路的点移动

这对我来说意味着我在这个块的某处使用了一个不正确的符号+、-、*或/,但我似乎不知道在哪里。。。谁能给我指出正确的方向吗

函数NormalAngle360定义为:

double NormalAngle360(const double aInAngle)
{
    //## Operation [c0b17aaa-bda1-4164-8ba7-5f960c924a32]
    double ldAngle = NormalAngle(aInAngle);
    if (ldAngle < 0.0) 
        ldAngle += 360.0;
    return ldAngle;
    //## Operation End
}

由于将角度规格化为介于0和360之间,因此应该只有两种可能性。角度从某个值开始,然后减小到0,在这种情况下

m_SteerData.DistanceToGo = (arcAngle/180 * PI * m_currentRadius); 
m_SteerData.DistanceToGo = ((360 - arcAngle)/180 * PI * m_currentRadius); 
或者角度从某个值开始,增加到360,在这种情况下

m_SteerData.DistanceToGo = (arcAngle/180 * PI * m_currentRadius); 
m_SteerData.DistanceToGo = ((360 - arcAngle)/180 * PI * m_currentRadius); 
应该有用

两种情况下都可以使用第一个版本


如果两个版本都不起作用,我认为角度不是它应该的。也许您可以输出arcAngle的值来检查它。

if…else分支中的行都执行相同的操作:

    arcAngle = 360 - (NormalAngle360(NormalAngle360(ldFAZ_CentrePos_AC) + NormalAngle360(m_circuitStartAngle))); 

    arcAngle = 360 - (NormalAngle360(NormalAngle360(m_circuitStartAngle) + NormalAngle360(ldFAZ_CentrePos_AC))); 
因为360-a+b和360-b+a是一样的。你需要重新思考这个逻辑

另外,您不需要对NormalAngle360进行两次内部调用,该行可以写为:

arcAngle = 360 - NormalAngle360( ldLAZ_CentrePos_AC + m_circuitStartAngle );
也许你正在寻找的只是改变+到-这里;和/或取出360-


此外,NormalAngle360函数应检查角度>=360.0,并从中减去360

我发现了问题-问题是我在语句的if子句中调用的函数中漏掉了一个-符号:

if (m_OVF_TURN_DIR == TURN_LEFT)
    {
        arcAngle = 360 - fabs((NormalAngle360(-NormalAngle360(ldFAZ_CentrePos_AC) + NormalAngle360(m_circuitStartAngle)))); 
        m_SteerData.DistanceToGo = (arcAngle/180 * PI * m_currentRadius);  
    }

使用`-NormalAngle360。。。在最里面的括号中,解决了我遇到的问题。

你能发布你的NormalAngle360代码吗?NormalAngle360代码已添加。m_currentRadius正在修改和声明的代码。很可能这个变量有问题,我认为它根本没有变小。问题是,当实体顺时针移动时,它确实起作用。。。只是当它逆时针移动的时候…嗯。。很抱歉,在这种情况下,我想你必须在这里显示整个代码来检测逻辑的错误。谢谢你的回答,我给了你逆时针距离的建议,但它仍然是从一个看似随机的值开始的,很可能是弧的实际距离,但是,随着飞机沿着弧线飞行,飞机会增加而不是减少。然而,在做了你在这里建议的改变之后,它似乎比以前增长得更快……好的。请告诉我arcAngle从何处开始,以及在这两种情况下是增加还是减少?arcAngle是两条线之间的角度,A线从螺旋线的中心到实体的当前位置,B线从螺旋线的中心到从实体的当前位置开始的弧的末端。圆弧长度的计算取决于实体移动的速度及其与螺旋中心的距离。我将圆弧作为圆的一部分来处理-因此,如果圆弧从点X开始,并顺时针延伸,它的角度将随着它沿圆移动的距离而增加。如果它逆时针延伸,它的角度会减小。我在计算距离ToGo时,使用了原始角度和最终角度之间的差值B,无论是增加还是减少。。。当它增加时,它似乎在工作,即当实体顺时针移动时,但当它减少时,即当实体逆时针移动时,我似乎无法得到正确的逻辑。。。else不完全做相同的事情-else子句使用圆弧计算距离
角度*PI*m_电流半径/180.0,而if使用:m_SteerData.DistanceToGo=arcAngle*PI*m_currentRadius;计算距离;。else子句在计算实体顺时针方向移动时的距离时工作正常-它显示的距离值正确,并且在实体接近圆弧末端时向下计数为0。但是,if不能正常工作-它显示的值是向上计数而不是向下计数if和else之间的差值是,在else中,我将该值除以180。。。但我不确定我应该在if中做什么,以及为什么它生成的值会随着实体接近弧的末端而增加,而不是减少…?@someone2088引用的行也做了同样的事情。如果这是故意的,那么你可以在If之前进行计算。但这对我来说意味着你没有做正确的计算。