等式返回1.#QO

时间:2014-07-06 00:52:09

标签: c

我已经尝试在几个网站上搜索关于我的问题的任何类似内容,包括这个网站,但到目前为止我找到的并不相似。在搜索了术语1.#QO之后,我发现了一些关于安静的NaN,但我一般都是C的新手,所以我真的不明白这个问题。

我正在尝试获取操纵杆的x和y值,然后使用距离公式来找到操纵杆位置与操纵杆自然静止位置(0,0)之间的距离。

如果重要,我正试图在RobotC中这样做。

#pragma config(Hubs,  S1, HTMotor,  none,     none,     none)
#pragma config(Sensor, S1,     ,               sensorI2CMuxController)
#pragma config(Motor,  mtr_S1_C1_1,     DriveMotor,    tmotorTetrix, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

#include "JoystickDriver.c"                                                                                                                                     

int calculateDrivePower(int joyStickX, int joyStickY)
{
    if (joyStickX != 0 & joyStickY != 0)
    {
        int joyDistance = (sqrt(pow((joyStickX - 0),2)+ pow((-joyStickY - 0),2)));
        joyDistance = ((joyDistance/127)*100);
        return (joyDistance);
    }
    else
    {
        return 0;
    }
}

task main() 
{
    int previousJoySlope = 0;
    int TurnSpeed = 70;
    while (true)
    {
        getJoystickSettings(joystick);
        if (abs(joystick.joy1_x1) > 10 || abs(joystick.joy1_y1) > 10)
    {
        writeDebugStreamLine("Test successful.");
        motor[DriveMotor] = calculateDrivePower(joystick.joy1_x1,joystick.joy1_y1);
    }
    }
}

如果有人能提供任何见解,那就太棒了,谢谢。

1 个答案:

答案 0 :(得分:0)

if (joyStickX != 0 & joyStickY != 0)
{
    int joyDistance = (sqrt(pow((joyStickX - 0),2)+ pow((-joyStickY - 0),2)));
    joyDistance = ((joyDistance/127)*100);
    return (joyDistance);
}

出现的第一个问题是if语句中的条件。您有一个&,最有可能是&&

if (joyStickX != 0 && joyStickY != 0)

(注意:可能应该在上面使用,因为您可以使用测试&的逻辑joystickx != 0提供条件,但在这种情况下,它提供相同的在这种情况下,我建议使用更具可读性的&&

代码的下一部分只是操纵杆的0,0present position之间的向量距离。在您的案例dist^2 = (x2-x1)^2 + (y2-y1)^2中,x1,y1 = 0,0的一般形式。取两边的平方根提供dist = sqrt((x2-x1)^2 + (y2-y1)^2)或C表示法:

dist = (sqrt(pow((joyStickX - 0),2)+ pow((-joyStickY - 0),2)));

接下来,您应用了dist = dist * 100/127的缩放比例,它提供了返回的最终距离。希望这有助于您了解代码的作用。