我已经尝试在几个网站上搜索关于我的问题的任何类似内容,包括这个网站,但到目前为止我找到的并不相似。在搜索了术语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);
}
}
}
如果有人能提供任何见解,那就太棒了,谢谢。
答案 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,0
和present 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
的缩放比例,它提供了返回的最终距离。希望这有助于您了解代码的作用。