• ベストアンサー

右手系と左手系、どこで差が出る?

皆様、いつもお世話になっております。 DirectX関連の質問は3度目になるのですが、どうかよろしくお願い致します。 DirectXを使い始めたのですが、D3D(X)~系の関数は左手系で計算を行っています。 自前でベクトルや行列のクラスを用意して使っているのですが、右手系とどこで差が出るのかがわからず困っております。 ・外積はどうなりますか?右、左手系では逆向きになりますか? ・任意軸回転行列はどうなりますか? 以上の二点を教えてください。よろしくお願い致します。

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

  • ベストアンサー
  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.1

表示が鏡面状に反対になるだけで、それ以外の違いはありません。 外積は、 c = a x b なら、常に c.x = a.y * b.z - a.z * b.y c.y = a.z * b.x - a.x * b.z c.z = a.x * b.y - a.y * b.x です。 たとえば、座標(1,0,0)をz軸中心に正方向90度回転すると、どちらでも(0,1,0)になります。 それだけです。 あとはxyzそれぞれどれを、上下、前後、左右と想定するのか違うだけです。

35fa8e3c
質問者

お礼

qwertfk様、いつも本当に助かります。 表示上の問題なのですねー 外積も任意軸回転も、左右区別せずに使っていこうと思います。 本当にありがとうございました!

関連するQ&A

  • 任意軸回転を、XYZ軸回転の組み合わせに分解する?

    こんにちは、私は今DirectXを使って物理シミュレーションを行おうとしております。 そこで物体を任意軸回転させて表示したいのですが、どういった方法を用いれば実現できますか? http://marupeke296.com/DXGSmp_No10_Quaternion.html このサイトで解説されているようにクォータニオンを使うのでしょうか? ただこのサイトで示されているサンプルでは、玉ひとつひとつが回転しているわけではなく、位置がある軸に関して回転させた位置へ「並進させる」ということを行っています。 私は物体を回転させるときに、任意軸回転を使いたいなと思っています。 -- D3DXMatrixRotationX(&Rot_X, angle); D3DXMatrixMultiply(&World, &World, &Rot_X); -- 以上はX軸回転を行う行列をワールド座標変換行列に掛けるコマンドですが、この勢いで任意軸回転行列を作成・掛けるといったことはできますか? 知識が足りなく稚拙な表現で申し訳ありませんが・・・ 任意軸回転をXYZ軸回転の組み合わせに分解できれば D3DXMatrixRotationX(YやZ)とD3DXMatrixMultiply関数のみを使って簡単にできちゃうのですがそのような数学的手法は存在しますか? それとも、任意軸回転関数を自前で既に作ってあるので D3DXMATRIX型の変数にその値を手動で注入(構造体の中身を知る必要あり)、D3DXMatrixMultiply関数で掛けるといった操作でいけちゃうでしょうか? あとでちょっとやってみます。すみません。しかしD3DX~系の用意された関数の域を出て気持ちよくはないですが。

  • 線形代数学 ベクトル(0,1,1)を軸とするθの回転を与える行列

    線形代数学を最近学び始めて、いきずまってしまいました。 任意のベクトル(でいいのかな)を軸とするθの回転を与える行列を求める問題です。 問題として 3次元ユークリッド空間に直交座標x,y,zを入れて考える。 (1)x軸の周りのπ/4だけの回転を表す行列Qを求めよ。 (2)ベクトル(0,1,1)を軸とするθの回転を与える行列Q(-1)Rz(θ)Qを計算せよ。  ※Q(-1)はQの逆行列です。Rz(θ)はz軸の周りのθ回転の行列です。 (2)がわからなくて困っています。 行列Q(-1)Rz(θ)Qという形は対角化の形に似ているのですが、 これは、対角化を考えた時に、ベクトルが(0,1,1)がx軸と直角に交わっているからQが直行行列になるのかな~とか、思うのですが、 θ回転するのに対角行列が出てくる意味が少しわからないので、 (2)でなぜ行列Q(-1)Rz(θ)Qになるのか、解説をお願いします。 ちょっとわかりにくい文章になってしまってるかもしれませんが、 申し訳ありません・・・。

  • 任意軸回転行列の、回転量を少し減らしたいのですが…

    皆様、いつもお世話になっております。 任意軸回転行列関係でひとつ疑問が出たので質問させていただきます。 3D物理シミュレータで物体の回転を扱うときに出た疑問です。 「アクセル」という行列に、単位行列を初めとして、さまざまな任意軸回転行列を、左から掛けていきます。 これが終わると「アクセル」はある回転行列になるはずです。 次に、問題があります。「ベロシティ」という行列に、「アクセル」という回転行列を、左からそのまま掛けるのではなく、回転量をちょっと少なくした、弱い回転を、しかしながら回転軸は同じものを、掛けたいのです。 -- ・まず思いついた解決策: 回転角と回転軸を保持しておいて、ベロシティに「回転軸」と「デルタ×回転角」を掛ける、という方法。 =>しかしアクセルの時点で、行列を左から掛けていきたいので、この過程で回転角と回転軸を更新し続ける手法がわかりません。そもそも存在するのでしょうか。 ・次に思いついた方法: アクセルで左から任意軸回転行列をかけていった完成品は、これもまた任意軸回転行列のはずですから、この完成した行列から回転軸と回転角を逆算して、ベロシティに掛ける行列を「回転軸」と「デルタ×回転角」から再構成する、という方法。 =>任意軸回転行列から回転角と回転軸を逆算する方法がわかりません。 ・次に思いついた方法: 任意軸回転行列から角度と軸を逆算しなくとも、任意軸回転行列に、何かしら手を加えると、回転角度に定数を掛け、回転量を調節することができる。 =>どんな方法があるのだろうか -- これらの推測はしましたが、どれも解答にたどり着けませんでした。 どうかよろしくお願い致します。 不明な点がございましたら随時補足いたします。

  • 単位ベクトルを回転させる問題が分かりません。

    単位ベクトルを回転させる問題が分かりません。 この問題が分かりません。 「y軸方向の単位ベクトルを(1,1,2)軸の周りにπ/3だけ回転すると、どのようなベクトルになるか?」 教科書や図書館に行ったりして調べてるのですが全く歯が立ちません。 内積とか外積を使うのかな?と思っているのですが、使い方が全く分かりません。 教えてくださいm(__)m よろしくお願いします。

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

    こんにちは。お知恵をお借りしたく質問致します。 プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。 ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。) 図のように、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軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。 その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。 どうかよろしくお願いいたします。

  • ベクトルの外積で求められる現象は?

    ローレンツ力、フラミングの左手の法則は、ベクトルの外積で求められる現象だと思うのですが、他にベクトルの外積で求められる現象はありますか? 宜しくお願い致します。

  • ベクトルの外積が右ネジの方向を向く理由は?

    ベクトルの外積の向きが、2つのベクトルが作る平面に対して垂直(右ネジの方向を向く)なる理由は、何故でしょうか? 行列で、証明出来るのでしょうか? 行列が苦手なので、行列式を見てもイマイチイメージが出来ません。 ローレンツ力から、ベクトルの外積の向きは、平面に対して垂直となると、定義づけをしていまっているのでしょうか? 宜しくお願い致します。

  • 行列 変換行列 行列の積

    変換行列に関して質問させて頂きます。 当方、行列に関する理解が乏しいので基礎を勉強し直しました。 前回、同次変換に関して質問させて頂きました。 URL:http://okwave.jp/qa/q6983574.html 新たに基礎的な部分を質問させて頂きます。 変換行列は回転行列を考えます。 右手系を採用してベクトルをx軸中心にθ回転した回転行列は、 (1   0     0   ) (0  cosθ  sinθ  ) (0  -sinθ  cosθ ) と表します。3行×3列の行列です。 よって、 変換後の列ベクトル(3×1)を (X) (Y) (Z) 変換前の列ベクトル(3×1)を (x) (y) (z) とすると、(3×1)=(3×3)×(3×1)なので (X)  (1   0     0   ) (x)   (Y)= (0  cosθ  sinθ  ) (y)  (Z)  (0  -sinθ  cosθ ) (z)  と表されると思います。 ここまでで間違いがありますでしょうか? ご指摘よろしくお願い致します。   合わせて並進を考える場合について教えて下さい。 例えば、x軸に3移動した場合を4行×4列の変換行列 で示す場合、どのように書けば良いのでしょうか? 添付画像の(A)と(B)どちらでしょうか? 合わせて理由も教えて頂けるとありがたいです。 回転行列を作った手順と同じくすると(A)の 表現で良いと考えているのですがどうでしょうか? 以上、ご回答何卒よろしくお願い致します。

  • 行列の変換での問題

    [問題文]空間において,x-z平面上の単位ベクトル(u,0,w)を考える。  y軸まわりの回転を表す行列のうち、ベクトル(0,0,1)をベクトル (u,0,w)に変換するものを求めよ。また求めた行列を利用して、(u,0,w) を軸とする角度θの回転を表す行列を求めよ。 3次元空間においての変換だと思うんですが、y軸の周りとなるとどのような変換になるんでしょうか。 わかる人にはわかるという問題だと思います。 お願いします。

  • 3次元空間の回転行列

    3次元空間上の点A(X,Y,Z)と点B(X',Y',Z')があるとします。ただし、点Bは、点Aを原点Oを中心とする3次元空間の回転をさせることによって得られる点とします。 このAをBへと回転させる行列を、特に以下のように考えて得られる回転行列として導出する方法を教えてください。 O,A,Bによって作られる平面に直交し、原点を通る軸を回転軸として、それを軸にAを∠AOB回転させる。 一応自分なりに考えたこの回転行列を求める方法としては、まず ベクトルOA、OBに対してシュミットの直交化を用いて新たな正規直交基底、Vx、Vy、Vzを求めます。ただし、はじめのVxの導出にはOAを用い、VzはVxとVyの外積を計算しました。 次にP=(Vx,Vy,Vz)として座標変換の行列Pを作ります。 そして、求める行列Wを W = PMz(P^-1) (Mzはz軸まわりに∠AOB回転させる行列、P^-1はPの逆行列) として導出しました。 このようにして解く方法を考えたのですが、これは正しいのでしょうか? また、これ以外にもっとスマートに解く方法があれば教えてください。 よろしくお願いします。

専門家に質問してみよう