0

ちょっと、次の関数から「Not a Number」の戻り値を取得しています:

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) の方向ベクトルを含む

どんな助けでも大歓迎です!

4

1 に答える 1

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))

また、任意の三角形ではなく、直角三角形の角度を計算しようとしていることを確認してください。

于 2011-10-28T16:36:21.373 に答える