• ベストアンサー

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

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

  • dempa
  • お礼率100% (3/3)

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

  • ベストアンサー
回答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% (2126/6288)
回答No.2

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

dempa
質問者

お礼

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

関連するQ&A

  • 3次元での回転による座標変換

    3次元での回転による座標変換に関して質問があります. X軸,Y軸,Z軸の直交座標系があるとします. この座標系において,ある位置ベクトル(a1,b1,c1)がX軸,Y軸,Z軸と成す角度は,θx,θy,θzは,ベクトルの内積から算出可能だと思います. θx=a1/sqrt(a1^2+b1^2+c1^2) θy=b1/sqrt(a1^2+b1^2+c1^2) θz=c1/sqrt(a1^2+b1^2+c1^2) X,Y,Zの直交座標系を回転させて,この位置ベクトルの向きを基準としたX'軸,Y'軸,Z'軸による新しい直交座標系を設定するには,どのようにすればよいでしょうか? θx,θy,θzと各軸での回転角度は違うものという認識でいいのでしょうか? 元の座標系において,各軸回りに順番に回転させればいいかと思うのですが,どうもイメージがつかみきれません. よろしくお願い致します.

  • 平面に垂直なベクトル

    三次元空間上での3点 x1,y1,z1 x2,y2,z2 x3,y3,z3 を通る平面に垂直なベクトルを算出する為にはどうのようにしたらよいでしょうか。 答えは0と特定の座標点(x.y.z)を通る形で算出したいと思っています。 (A=x.y.zとなるように) うまく質問できているかどうかわからないのですが、教えて頂ければ幸いです。よろしくお願いします。

  • 座標変換

    3次元(x,y,z)物体の回転でよくx軸、y軸、z軸で回転がありますが、xy平面との角度φを回転させたいときはどうすればいいでしょうか? xy平面との角度をφ回転させた後の座標(X,Y,Z)はどうなるのでしょうか? また X     x Y = T・y Z     z このような行列Tが存在するのでしょうか?

  • 投影平面の角度から求める座標

    三次元上の点Pの求め方についてご助力ください。 ■XYZ座標上の点P(Px,Py,Pz)を、ZX,XY,YZの三平面からみたときの点Pの傾きからPz=10 とした時の点Pの座標を求めよ。 ◇傾き  α=-17.22 (ZX平面よりX軸を基準にした傾き←(反時計回りが正)  β=2.29 (XY平面よりX軸を基準にした傾き)  γ=-13.22 (YZ平面よりY軸を基準にした傾き) ◇各平面上に投影された点P[x,y,z] (1)Pzx[Acosα,0,Asinα] [A=原点から点Pzxまでの距離] (2)Pxy[Bcosβ,Bsinβ,0] [B=原点から点Pxyまでの距離] (3)Pyz[0,Ccosγ,Csinγ] [C=原点から点Pyzまでの距離] □上記の(1)、(2)、(3)より連立方程式を作成。  Acosα=Bcosβ  Bsinβ=Ccosγ  Asinα=Csinγ また、  A=Pz/SINα  B=Pz/COSβ  C=PY/COSγ より 連立方程式  Px=Pz*[COSα/SINα]_1  Py=Px*[SINβ/COSβ]_2  Px=Py*[SINγ/COSγ]_3 となります。 この連立方程式の作成まですすめたのですが、この連立方程式1,2,3,が釣り合わず、どこか解き方を間違ったのではないかと考えています。 お忙しいなか恐縮ですが、3平面に投影された角度から点Pを求める解を教えてください。

  • 三次元座標の回転角度

    左手系三次元座標A(X,Y,Z)がB(x,y,z)に移動したとき、原点からみたZ軸の回転角度Θの算出は、 Θ=Atan(y/x)-Atan(Y/X) でいいですか。よろしくお願いします。

  • 平面ベクトルの例題

    次の問題の解答がよくわからないです 3次元空間において、原点を通り法線ベクトルが(a,b,c)である平面pがある。空間の点(x,y,z)に対し平面に関して対称の位置にある点を(x',y',z')とする。x',y',z'をa,b,c,x,y,zで表せ。  たぶん a(x+x'/2 -x)+b(y+y'/2 -y)+c(z+z'/2 -z)=0になると思いますがそこからそれぞれをabcxyzのみでどう表すのかわかりません。 教えてください。

  • 3次元座標2点からの直線式の求め方

    お世話になります。 3次元座標2点からの直線式(ax+by+cz=0)の求め方を教えて下さい。 2次元座標であれば、1つの傾きから算出できるのですが、3次元座標になると、X-Y平面、Y-Z平面での傾きの使い方がこんがらかってしまいます。 基本的な質問で申し訳ありませんが、よろしくお願い致します。 座標1 = (x1,y1,z1) 座標2 = (x2,y2,z2) 以上

  • 「平面の方程式」z軸の方向ベクトルは(0,0,1)

    非常に基本的な質問で恐縮ですが, 与えられた1点(x0,y0,z0)と法線ベクトルから平面の方程式を求める場合, a(x-x0)+b(y-y0)+c(z-z0)=0代入してときますよね. ここで,z軸に垂直である平面の方程式を求める場合, z軸の方向ベクトルが(0,0,1)であり,これを求める平面のベ法線べクトルとして, 上記式に代入し,z=z0となります. z軸の方向ベクトルは,(0,0,1)でないといけないのでしょうか? 0以外であれば,どの数字が入ってもいいと思うのですが, 1に限定する理由ってあるのでしょうか?

  • 極座標変換したベクトルにさらに直行なベクトル

    x,y,z軸に対して極座標変換したベクトルrがあります。 r = (sinθcosφ,sinθsinφ,cosθ)です。 このr軸上にそれぞれ直行なベクトルα,βがあります。その関係は r = β × α です。 このα,βのベクトル成分をベクトルrや単位ベクトルx,y,zなどから求めたいのですが、どのように求めてよいかわかりません。 x = (1,0,0), y= (0,1,0), z = (0,0,1)です。 ご存知の方詳しい方がいらっしゃったら教えて下さい。 よろしくお願いします。

  • ある平面上の円周の座標の求め方

    原点(0,0,0),法線(a,b,c)で表される平面上にある、 半径rの円の円周のx,y,z座標をrと角度θを用いて表したいのですが、 どのように表現できますでしょうか? どなたかご教授願います。

専門家に質問してみよう