プロが教えるわが家の防犯対策術!

まず、3次元座標上のあるベクトル(例:(x、y、z)=(1,1,1))をx-z平面上に投影します。
その投影された、ベクトルとx軸の成す角度を、ラジアンか角度で算出したいのですが、C++でどう書いていいのかわかりません。

アルゴリズムがわかっていても、C++でかけないという初心者です。
誰か、算出の方法を教えてください。お願いします。

A 回答 (2件)

ベクトル、転置を~および ' で表します。

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 を表示、出力、あるいは利用する)
    • good
    • 0
この回答へのお礼

本当に参考になりました。

わざわざありがとうございます。
さっそく試してみたいと思います。

お礼日時:2008/11/29 10:15

atan2(x, z)


でよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/29 10:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!