• ベストアンサー

3D座標上のベクトルをを2D平面に投影・・・

まず、3次元座標上のあるベクトル(例:(x、y、z)=(1,1,1))をx-z平面上に投影します。 その投影された、ベクトルとx軸の成す角度を、ラジアンか角度で算出したいのですが、C++でどう書いていいのかわかりません。 アルゴリズムがわかっていても、C++でかけないという初心者です。 誰か、算出の方法を教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ベクトル、転置を~および ' で表します。3次元ベクトル p~=(a,b,c)' を x-z 平面に投影すれば ベクトル q~=(a,0,c)' が得られます。これと x 軸方向の単位ベクトル e~=(1,0,0)'とのなす角度をθとすれば |e~|=1 なので cos(θ) = (q~,e~)/|q~|  = a/√(a^2+c^2) ------------------- (1) から θ = arccos(a/√(a^2+c^2)) ---------- (2) が得られます。私は C++ ではなく C 言語のレベルですが、この計算は C言語では下記のようになります。()はプログラムではなく説明文です。 //変数定義 double a,b,c; double theta; ::::: ::::: //実行段階 (ここで a,b,c に値を入れる) ::::: theta = acos(a/sqrt(a*a+c*c)); ::::: (ここで答え theta を表示、出力、あるいは利用する)

dempa
質問者

お礼

本当に参考になりました。 わざわざありがとうございます。 さっそく試してみたいと思います。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

atan2(x, z) でよいのではないでしょうか。

dempa
質問者

お礼

本当に参考になりました、わざわざありがとうございます。 こんなやり方もあったんですね。さっそく試してみたいと思います。