人に聞けない痔の悩み、これでスッキリ >>

あじぽんと申します。質問があります。

3次元空間にベクトルAが一本だけあるとします。
さらにベクトルAに直交するベクトルがいくつもあるとします。

ベクトルAの座標がわかっている時に、
ベクトルAに直交するベクトルの座標を、どれか一つだけ計算にて求めることは出来るのでしょうか?

よろしくお願いします。

A 回答 (2件)

こんばんは。



ちょっと待ってください。

「3次元空間にベクトルAが一本だけある」
と書かれていますが、
ベクトルというのは、向きと大きさ、言い換えれば、始点と終点の関係があるだけであって、
「空間にベクトルがある」
という言葉自体がおかしいです。

そして、
「ベクトルAの座標がわかっている時」
と書かれていますが、
ベクトルには座標というものは存在しません。
成分があるだけです。(上記で言った、向きと大きさ(始点と終点の関係)のことです。)


とはいえ、
成分が(a1、b1、c1)という3次元ベクトルがあるとしましょうか。
それに垂直なベクトルの成分を(a2、b2、c2)と置きます。
このとき、両者の内積はゼロになるわけですから、
a1,b1,c1,a2、b2、c2には、次の関係が成り立ちます。

内積 = a1・a2 + b1・b2 + c1・c2 = 0

>>>ベクトルAに直交するベクトルの座標を、どれか一つだけ計算にて求めることは出来るのでしょうか?

上の式を満たすようなベクトルを作ればよいだけです。
たとえば、b2とc2をゼロにしちゃえば、いとも簡単に1つ作れます。


以上、ご参考になりましたら。
    • good
    • 0
この回答へのお礼

>「空間にベクトルがある」
>という言葉自体がおかしいです。

>ベクトルには座標というものは存在しません。
>成分があるだけです。(上記で言った、向きと大きさ(始点と終点の関係)のことです。)

数学を理解されている方が私の質問を読んだ時に、一瞬思考が止まって「?」となったかもしれなかったのでしょうか。...すいませんでした。
ご回答を頂けたおかげで疑問を解決することができました。
ありがとうございました。

お礼日時:2008/09/24 08:55

それは簡単にできますよ。

たとえば、
A=(a1,a2,a3)
X=(x1,x2,x3)
とします。
X・A=0ですから、
a1x1+a2x2+a3x3=0
を満たすX=(x1,x2,x3)がAに直交します。
もっと詳しく言えば、a1≠0としたとき、
x2,x3を任意に与えて、x1=(-a2x2-a3x3)/a1とすればよいですね。
    • good
    • 1
この回答へのお礼

> もっと詳しく言えば、a1≠0としたとき、
> x2,x3を任意に与えて、x1=(-a2x2-a3x3)/a1とすればよいですね。

すばやいご回答、ありがとうございました。
内積な関係の式を変形して求めればよかったのですね。

本当にありがとうございました。助かりました。

お礼日時:2008/09/24 08:47

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q2つに直交する単位ベクトル

a=(1,2,1)にもb=(2、-1,1)にも直交する単位ベクトル
を求めたいのですが、求めたい単位ベクトルをxと置いて
a・x=0、b・x=0という風にしてみたのですがうまくいきません。
計算過程を含めご教授していただける方がいらっしゃいましたら宜しくお願いします。

Aベストアンサー

>> 求めたい単位ベクトルをxと置いて.。

x=(x,y,z)
 単位ベクトは、大きさが1だから、
|x|=1 と書けます。
   これを成分で表現して、
√[(x^2)+(y^2)+(z^2)]=1
    両辺を2乗して、
[(x^2)+(y^2)+(z^2)]=1・・・(A)

また、
>> a・x=0、 b・x=0

   是も成分で表現して、
(1,2,1)・(x,y,z)=0,  (2,-1,1)・(x,y,z)=0
x+2y+z=0・・・(B), 2x-y+z=0 ・・・(C)     

   (C)-(B)で、
   x=3y   これを、(B)に代入して、
   z=-5y

   x,z が y で表されているのを確認して、
   2式を(A)に入れて、

 9(y^2)+(y^2)+25(y^2)=1
           35(y^2)=1
     y=(1/√35), (-1/√35)

    即ち求めたい単位ベクトルは、
  (3/√35, 1/√35, -5/√35) 、
  (-3/√35, -1/√35, 5/√35) 。

>> 求めたい単位ベクトルをxと置いて.。

x=(x,y,z)
 単位ベクトは、大きさが1だから、
|x|=1 と書けます。
   これを成分で表現して、
√[(x^2)+(y^2)+(z^2)]=1
    両辺を2乗して、
[(x^2)+(y^2)+(z^2)]=1・・・(A)

また、
>> a・x=0、 b・x=0

   是も成分で表現して、
(1,2,1)・(x,y,z)=0,  (2,-1,1)・(x,y,z)=0
x+2y+z=0・・・(B), 2x-y+z=0 ・・・(C)     

   (C)-(B)で、
   x=3y   これを、(B)に代入し...続きを読む

QベクトルAとBに垂直なベクトルCを求めるには?

ベクトルAとBがあり、その両方に垂直なベクトルを求めたいのですが、
どうすれば良いのでしょうか?
内積を計算した結果で0になるものが直行しているというのはわかるのですが・・・

Aベストアンサー

rei00 です。先程の回答違ってますね。alfeim さんがお書きの様に A, B の外積が求めるものですね。

で,あえて内積で頑張るなら次の様になると思います。A, B を三次元ベクトル A (a1, a2, a3), B (b1, b2, b3) とし,求めるベクトルを X (x, y, z) とすると。

垂直=内積0より
 a1・x + a2・y + a3・z = 0
 b1・x + b2・y + b3・z = 0

これを解いて
 x = z・(b3・a2 - a3・b2)/(a1・b2 - b1・a2)
 y = z・(b3・a1 - a3・b1)/(a2・b1 - b2・a1)

今,求めるベクトルの大きさが決まっていませんので,x, y, z の比を使って,求めるベクトルは (a2・b3 - b2・a3, a3・b1 - b3・a1, a1・b2 - b1・a2) となります。

つまり A, B の外積になります。なお,3次元上の次元でも同様に出来ると思います(たぶん・・・)。

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

お世話になります。

3次元座標2点からの直線式(ax+by+cz=0)の求め方を教えて下さい。

2次元座標であれば、1つの傾きから算出できるのですが、3次元座標になると、X-Y平面、Y-Z平面での傾きの使い方がこんがらかってしまいます。
基本的な質問で申し訳ありませんが、よろしくお願い致します。

座標1 = (x1,y1,z1)
座標2 = (x2,y2,z2)

以上

Aベストアンサー

> 直線式(ax+by+cz=0)の求め方を教えて下さい。
3次元座標では(ax+by+cz=0)は原点を通る平面になり、直線の式ではありません。ax+by+cz=dは平面の一般式です。

2点を通る直線の式には公式があります。
以下のように簡単に導けます。
点(x1,y1,z1)を通り方向ベクトル(x2-x1,y2-y1,z2-z1)の直線ですから
媒介変数形式で
(x,y,z)=(x1,y1,z1)+t(x2-x1,y2-y1,z2-z1)
と成ります。
これを変形してすれば
(x-x1)/(x2-x1)=(y-y1)/(y2-y1)=(z-z1)/(z2-z1)
と3次元座標の直線の式となります。

Q線形代数 直交するベクトル

(1,2,0) (5,6,4)の2つの列ベクトルがあります。(表記は行ベクトルのようになってしまいますが・・・)

この2つの列ベクトルに直交する、3×1行列X(成分はx,y,zと置きます)を求めよ。

という問題がわかりません。
ヒントがあり、シュミットの直交化法を用いるか、直交することを式で表すかどちらでもよいと
あるのですが、さっぱりわかりません。

1*x+2*y+0*z=0
5*x+6*y+4*z=0
の二つの式を解くのでしょうか?
でもそれだと式の数が足りませんよね・・

分かる方がいれば教えてください

Aベストアンサー

z=kとして2つの式を解けば良いでしょう。

そうすると(~を転置の記号として使うと)
(x,y,z)~=(-2k,k,k)~=k(-2,1,1)~
と直交する列ベクトルが求まります。kは任意定数です。

k=-1と選べば直交列ベクトルは(2,-1,-1)
k=1と選べば直交列ベクトルは(-2,1,1)
となります。

k(スカラー変数、k≠0)の値によって、ベクトルの大きさやベクトルの向き(kの符号によって向きが変わる)が変わりますが、元の2つの列ベクトルと直交するベクトルであることには変わりません。ベクトルの成分(要素)の比が簡単な比になるようにkの値を選んだり、kのまま直交列ベクトルを一般形をそのまま答えとすることもあります。

授業や先生がどちらの答えを使っているかで判断すれば良いでしょう。

Q3次元ベクトルをある軸ベクトルで回転させたい

3次元ベクトルの求め方を教えてください。

下記図のように始点を軸ベクトルでθ(度)だけ回転したときの?の位置を求めたいのです。
これはどのような計算方法になるのでしょうか?なかなか思いつかなくて非常に悩んでいます。
アドバイスや回答をいただけたら助かります。よろしくお願いします。

Aベストアンサー

先ず、中心点(Sx,Sy,Sz)が原点にくるよう全体を平行移動させます。
(一番最後に元に戻します)
始点(Px,Py,Pz)は、(Px-Sx,Py-Sy,Pz-Sz)に移ります。この座標を(Px',Py',Pz')とします。

次に、回転軸ベクトル(Ax Ay Az)を回転させ、x軸に合致させます。それには二回の
回転変換が必要です。
最初に、ベクトル(Ax Ay Az)と、x軸方向単位ベクトル(1 0 0)のなす平面の法線ベクトルが
z軸に合うよう、x軸を回転させます(その角度をφとします)。
すると、回転軸ベクトルはx-y平面上に乗るので、それがx軸に合うよう、z軸を回転させます
(その角度をψとします)。

ベクトル(Ax Ay Az)と、x軸方向単位ベクトル(1 0 0)のなす平面の法線ベクトルは、(0 Az -Ay)。
x軸周りにφ回転させると、このベクトルは、
「1  0    0   「 0  =「      0
0 cosφ -sinφ   Az   Az・cosφ+Ay・sinφ
0 sinφ  cosφ」 -Ay」  Az・sinφ-Ay・cosφ」
で、z軸ベクトルに合うので
「      0      =「0
Az・cosφ+Ay・sinφ  0 
Az・sinφ-Ay・cosφ」  1」
これから、cosφ=-Ay/(Ay^2+Az^2)、sinφ=Az/(Ay^2+Az^2)
∴ φ=Arctan(-Az/Ay)

回転軸ベクトル(Ax Ay Az)は、
「1  0    0   「Ax =「      Ax      =「       Ax                   =「Ax 
0 cosφ -sinφ   Ay   Ay・cosφ-Az・sinφ   Ay・{-Ay/(Ay^2+Az^2)}-Az・{Az/(Ay^2+Az^2)}   -1
0 sinφ  cosφ」  Az」   Ay・sinφ+Az・cosφ」  Ay・{Az/(Ay^2+Az^2)}+Az・{-Ay/(Ay^2+Az^2)}」  0」
に変換され、x-y平面上に乗ります。これを(Ax' Ay' Az') とします。
つまり、(Ax' Ay' Az')=(Ax -1 0)

始点(Px',Py',Pz')もこの変換を受けるのですが、変換を全部纏めて後、一括変換させます。

今度は、x-y平面上に乗った回転軸ベクトル(Ax' Ay' Az')を、z軸の周りにψ回転させます。
「cosψ -sinψ 0 「Ax'  =「Ax'・cosψ-Ay'・sinψ =「Ax・cosψ+sinψ
sinψ  cosψ 0   Ay'   Ax'・sinψ+Ay'・cosψ   Ax・sinψ-cosψ
  0    0   1」  Az'」       Az'      」     0      」
これが、x軸ベクトルに合うので、
Ax・cosψ+sinψ=1
Ax・sinψ-cosψ=0
これから、cosψ=Ax/(Ax^2+1)、sinψ=1/(Ax^2+1)
∴ ψ=Arctan(1/Ax)

以上の回転の変換の積は、
「cosψ -sinψ 0 「1  0    0   =「cosψ -sinψ・cosφ  sinψ・sinφ
sinψ  cosψ 0   0 cosφ -sinφ   sinψ  cosψ・cosφ -cosψ・sinφ
  0    0   1」  0 sinφ  cosφ」   0     sinφ      cosφ   」

この変換を始点(Px',Py',Pz')に施します。
「cosψ -sinψ・cosφ  sinψ・sinφ  「Px' = 「Px'・cosψ-Py'・sinψ・cosφ+Pz'・sinψ・sinφ
sinψ  cosψ・cosφ -cosψ・sinφ  Py'   Px'・sinψ+Py'・cosψ・cosφ-Pz'・cosψ・sinφ
  0     sinφ      cosφ   」 Pz'」  Py'・sinφ+Pz'・cosφ               」 

この点を(Px”,Py”,Pz”)とします。

さて、ここでx軸に合った回転軸ベクトル(1 0 0)周りに(Px”,Py”,Pz”)を角度θ、回転させます。
「1  0    0   「Px” =「     Px”   
0 cosθ -sinθ   Py”  Py”・cosθ-Pz”・sinθ 
0 sinθ  cosθ」  Pz”」  Py”・sinθ+Pz”・cosθ」

これを(P_x, P_y, P_z)とします。

今度は、回転させた回転軸を元に戻す変換です。
回転の変換の逆行列は、行列各要素の余因子の行と列を入れ替えたものを行列式で割ったもので、
行列式は、(cosψ)^2+(sinψ)^2=1 なので、逆行列は
「 cosψ      sinψ        0  
-sinψ・cosφ  cosψ・cosφ   sinφ
sinψ・sinφ   -cosψ・sinφ  cosφ」

これを、(P_x, P_y, P_z)に施します。
「 cosψ      sinψ        0   「P_x =「P_x・cosψ+P_y・sinψ
-sinψ・cosφ  cosψ・cosφ   sinφ  P_y   -P_x・sinψ・cosφ+P_y・cosψ・cosφ+P_z・sinφ
sinψ・sinφ   -cosψ・sinφ  cosφ」 P_z」  P_x・sinψ・sinφ-P_y・cosψ・sinφ+P_z・cosφ」

結局、θ回転後のP点の座標は、
x座標 : P_x・cosψ+P_y・sinψ
y座標 : -P_x・sinψ・cosφ+P_y・cosψ・cosφ+P_z・sinφ
z座標 : P_x・sinψ・sinφ-P_y・cosψ・sinφ+P_z・cosφ
となります。

ここで、置き換えた変数を順次、元に戻します。
P_x、P_y、P_z を Px”、Py”、Pz” に、
Px”、Py”、Pz” を Px’、Py’、Pz’ に、
最後に、平行移動を戻して Px’、Py’、Pz’ を Px、Py、Pz に直します。

先ず、中心点(Sx,Sy,Sz)が原点にくるよう全体を平行移動させます。
(一番最後に元に戻します)
始点(Px,Py,Pz)は、(Px-Sx,Py-Sy,Pz-Sz)に移ります。この座標を(Px',Py',Pz')とします。

次に、回転軸ベクトル(Ax Ay Az)を回転させ、x軸に合致させます。それには二回の
回転変換が必要です。
最初に、ベクトル(Ax Ay Az)と、x軸方向単位ベクトル(1 0 0)のなす平面の法線ベクトルが
z軸に合うよう、x軸を回転させます(その角度をφとします)。
すると、回転軸ベクトルはx-y平面上に乗るので、それがx軸...続きを読む

Q3次元座標を原点中心に回転したい

任意のゼロでないベクトル(a,b,c)を原点中心に回転し、z軸に合致させるとする。同じ回転移動を3次元座標上の任意の点(x,y,z)に対して行った時の移動後座標が知りたいのです。

計算と結果を教えて下さい。

Aベストアンサー

A No. 1 です。補足。

「回転行列」
http://www.cg.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/tech07.html

ロドリゲスの公式もあります。

Q平面のベクトル内積=0で垂直になる理由?

平面と平面の位置関係が垂直になる時、内積がゼロになることに関しまして、

なぜなのかを、可能ならば 直感的に理解したいです。

ベクトルの基本は勉強しましたが・・・ 

突然、「垂直ならば この計算の答えがゼロになる」 と教わっただけで、まだ腑に落ちないでいます。

もしも良い説明がありましたら、よろしくお願いいたします。

Aベストアンサー

>なぜなのかを、可能ならば 直感的に理解したいです。

visualにいうこととして、幾何学的に考えてはどうですか。

ベクトルA↑とベクトルB↑の内積IPは

IP=A↑・B↑=|A↑||B↑|cosθ

であって|A↑|、|B↑|はベクトルの大きさ、θはA↑、B↑のなす角度です。

IP=A↑・B↑=0



θ=90°

を意味することが解ります。

いいかえるとIP=A↑・B↑はA↑がB↑に落とす影(射影)であって、垂直なら影が0ということです。

0でない場合はA↑とB↑は平行成分を有して、相互に影を落とすということです。

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Q回転した座標軸と一致させるための回転軸と角度の算出

こんにちは。お知恵をお借りしたく質問致します。
プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。

ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。)

図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。
また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)です。回転方向は、ベクトルの向きに時計回り…右ネジの法則みたいな感じです。

x軸から見たXの角度(θxX), y軸からのX(θyX), z軸からのX(θzX)
同様にx軸から見たY(θxY),θyY,θzY、θxZ,θyZ,θzZ
といったように、それらの角度(コサイン値)は分かっています。
(=xyz座標からみたXベクトルの方向余弦、Yベクトルの方向余弦、Zベクトルの方向余弦が分かっている。)

z軸とZ軸の外積を取ったベクトルを回転軸として、θzZが分かっているのでその角度で回転することでZ軸は一致しますけど、XY軸は合いません。(当然ですが…)

そのXY軸を合わせるためにまた回転するというのも遠回りで、任意の軸1本を中心に何度か回転するだけ(上記関数を1度使用するだけ)で、必ず向きが一致する解があると思うのですが、その任意軸と角度を算出する方法が分かりません。

一般にどういう計算をするのでしょうか。アドバイスいただければ幸いです。
なお、上記関数を用いない方法でも構いません。
「X軸(Y軸、Z軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。

その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。
どうかよろしくお願いいたします。

こんにちは。お知恵をお借りしたく質問致します。
プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。

ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。)

図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。
また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)...続きを読む

Aベストアンサー

というかそのままでいいのか。バカだ。。。。

回転前の基底ex, ey, ez,回転後の基底eX, eY, eZとして

eX = cos(θxX) ex + cos(θyX) ey + cos(θzX) ez
eY = cos(θxY) ex + cos(θyY) ey + cos(θzY) ez
eZ = cos(θxZ) ex + cos(θyZ) ey + cos(θzZ) ez

だから,この係数行列がそのまま座標回転行列。
座標回転行列は実直交行列なので,この転置行列が逆行列。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング