嘿我从以下函数中获得“非数字”的返回值:
void Spider::setAngles(double x,double y, double l1, double l2){
double theta1, theta2;
theta2=acos((pow(x,2)+pow(y,2)-pow(l1,2)-pow(l2,2))/(2*l1*l2));
cout<<theta2* 180/PI<<endl;
theta1=(-((l2*sin(theta2)*x)+(l1+l2*cos(theta2)*y))/((l2*sin(theta2)*y)+ (l1+l2*cos(theta2)*x)))* 180/PI;
cout<<theta1;
}
我知道ACos需要-1和1之间的参数值,但我无法弄清楚如何做到这一点,如果说末端效应点是(15,15),长度都等于2 ......
我需要将一切正常化吗?包括关节之间的距离,以及来自(0,0) - >(15,15)
的方向向量非常感谢任何帮助!
答案 0 :(得分:1)
cos(angle) = Adjacent/Hypotenuse
这意味着您的theta2
代码中包含:
Adjacent = x*x + y*y - l1*l1 - l2*l2
Hypotenuse = 2*l1*l2
充其量这是倒退的,更可能是错误的,具体取决于你想要做什么。如果您尝试使用从(0,0)到(x + l1,y + l2)的斜边来确定直角三角形的角度,您可以使用:
Adjacent = x + l1
Hypotenuse = sqrt((x+l1)*(x+l1) + (y+l2)*(y+l2))
或三角形(0,0)到(x-l1,y-l2):
Adjacent = x - l1
Hypotenuse = sqrt((x-l1)*(x-l1) + (y-l1)*(y-l1))
还要确保您尝试计算直角三角形中的角度,而不是任意角度。