• ベストアンサー

空間の座標の求め方

下の図のような直方体があります。(縦2a、横2b、長さ2c) この直方体の中心を原点とし、図のように3軸を決めます。 この時、A(c,-b,a)、B(c,b,a)、C(c,-b,-a)、D(c,b,-a)とおけ、 y軸を中心としてθ1だけ回転(90°回転すると面ABCDがZ軸の上を向く)、 z軸を中心としてθ2だけ回転(90°回転するとABCD面はy軸の正方向(右側)を向く)した場合、 A,B,C,Dはそれぞれどのような座標になるのか求めたいのです。 θ2だけ回転した場合は、xv平面で考えればいいので、 なんとか自分で出すことが出来ました。 Aは(c・cosθ2+b・sinθ2、c・sinθ2-b・cosθ2、a) Bは(c・cosθ2-b・sinθ2、c・sinθ2+b・cosθ2、a) Cは(c・cosθ2+b・sinθ2、c・sinθ2-b・cosθ2、-a) Dは(c・cosθ2-b・sinθ2、c・sinθ2+b・cosθ2、-a) で、問題はこれにθ1の回転が加わった場合、 A,B,C,Dの座標はどうなるのでしょうか? 空間で考えるのが苦手なため、ここでストップしてしまっています。 10年以上数学というものから遠ざかってて苦戦しています。 数学詳しい方、ぜひ教えて下さい。 (できれば考え方も。この際、空間図形に強くなりたいもので)

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

  • ベストアンサー
  • info22
  • ベストアンサー率55% (2225/4034)
回答No.1

空間での座標の回転や平行移動する変換はアフィン変換といって、通常行列を使ってやれば、行列の掛け算で簡単に変換できます。つまり、必要な変換行列を求めてやれば、座標点行列にその変換行列をかけてやれば移動後の座標点行列が求まります。 ただ、筆算では計算が大変なので、数式処理計算ソフトを使います。 フリーソフト(たとえば次のURLのwxMaxima(WindowsXP版Maxima)など)をネット上からダウンロードしてきて使えば良いかと思います。 http://www.cymric.jp/maxima/maxima-winxp.html 使い方もネット上にたくさんあります。 http://cosmo.phys.hirosaki-u.ac.jp/wiki.cgi/maxima アフィン変換については以下のURLに詳細に載っています。 http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%A2%A5%D5%A5%A3%A5%F3%CA%D1%B4%B9_3DCG z軸を中心としてθ2だけ回転する行列に y軸を中心としてθ1だけ回転する行列を 掛けてやると2つの軸の周りの回転移動をする行列が求まるので、 座標点行列に、その回転移動行列を掛けてやれば、回転移動後の座標点が一度に全部求まります。 計算は上記のURLにある行列を選んでwxMaximaに入力して、行列を掛けて回転移動行列を求め、入力した座標点行列に掛ける式を書くだけで、結果が出てきます。 wxMaxima式の書き方で書くと z軸の周りの回転行列 M1:matrix( [cosθ2,sinθ2,0,0], [-sinθ2,cosθ2,0,0], [0,0,1,0], [0,0,0,1] y軸の周りの回転行列 M2:matrix( [cosθ1,0,-sinθ,0], [0,1,0,0], [sinθ1,0,cosθ1,0], [0,0,0,1,]); 2つの回転を続けて同時に行う回転移動行列 M3:M1.M2 回転移動前の座標点行列 X:matrix( [xa,ya,za], [xb,yb,zc], ... [xg,yg,zg], [xh,yh,zh]); ↑直方体の頂点A,B,C,D,E,F,G,Hの座標点を並べるだけです。 求める移動後の座標点行列は Y:X.M3; で計算してくれます。 多分計算式が長くなると思いますが、具体的数値を入れてしまえば、単に移動後の座標点A',B', ... ,H'の座標が出てくるかと思います。 (式の簡単化や展開はwxMaximaに用意されている関数を使えば簡単です。 マニュアル等をみればどんな関数があるかは分かるでしょう。

128yen
質問者

お礼

ご回答ありがとうございます。 アフィン変換のHP見てみましたが、う~ん難しそう(^^;; ソフトを使って計算するのは簡単でしょうが、詳細を知りたいので 少し勉強してからこれを使ってみたいと思います。 その時にはよろしくお願いします。

その他の回答 (3)

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.4

#1です。 A#1の >回転移動前の座標点行列 >X:matrix( >[xa,ya,za], >[xb,yb,zc], > ... >[xg,yg,zg], >[xh,yh,zh]); は M1,M2 が 4X4行列なので X:matrix( [xa,ya,za,0], [xb,yb,zc,0], ... [xg,yg,zg,0], [xh,yh,zh,0]); と訂正して下さい。 質問の >これにθ1の回転が加わった場合、 >A,B,C,Dの座標はどうなるのでしょうか? θ2=s2,θ1=s1とおいてアフィン変換すると θ2の回転後θ1の回転を行った場合のA,B,C,Dの移動先座標A',B',C',D'は A':(b*cos(s1)*sin(s2)+c*cos(s1)*cos(s2)+a*sin(s1),c*sin(s2)-b*cos(s2),-b*sin(s1)*sin(s2)-c*sin(s1)*cos(s2)+a*cos(s1)), B':(-b*cos(s1)*sin(s2)+c*cos(s1)*cos(s2)+a*sin(s1),c*sin(s2)+b*cos(s2),b*sin(s1)*sin(s2)-c*sin(s1)*cos(s2)+a*cos(s1)), C':(-b*cos(s1)*sin(s2)+c*cos(s1)*cos(s2)-a*sin(s1),c*sin(s2)+b*cos(s2),b*sin(s1)*sin(s2)-c*sin(s1)*cos(s2)-a*cos(s1)), D':(-b*cos(s1)*sin(s2)+c*cos(s1)*cos(s2)-a*sin(s1),c*sin(s2)+b*cos(s2),b*sin(s1)*sin(s2)-c*sin(s1)*cos(s2)-a*cos(s1)). となりますね。

  • arrysthmia
  • ベストアンサー率38% (442/1154)
回答No.3

> θ1とθ2の順番が異なると位置が異なるというのが > 理解できません。 > どちらが先でも同じ位置に来ると思うのですが・・・ 思っていないで、実験してみましょう。 羊羹か蒟蒻に竹串を刺して、回転してみます。 実際にやってみれば、一目瞭然です。 計算上も、No.2 の結果が、θ1とθ2について 対称な式でないことから確認できます。

  • arrysthmia
  • ベストアンサー率38% (442/1154)
回答No.2

θ2 の回転を、xy 平面で考えて、解決することができたのですね。 その計算を、行列を使って表示すると、 xy 平面での回転 [ x ] [ y ] ↓ [ cosθ -sinθ ] [ x ] [ sinθ cosθ ] [ y ] を使って、、 [ x ] [ y ] [ z ] ↓ [ cosθ2 -sinθ2 0 ] [ x ] [ sinθ2 cosθ2  0 ] [ y ] [ 0   0   1  ] [ z ] と書けますね。 同様に、zx 平面での回転は、 [ x' ] [ y' ] [ z' ] ↓ [ cosθ1  0   sinθ1 ] [ x' ] [ 0   1   0    ] [ y' ] [ -sinθ1 0   cosθ1 ] [ z' ] です。 これを合成して、 [ x ] [ y ] [ z ] ↓ ↓ θ2 in xy ↓ [ cosθ2 -sinθ2 0 ] [ x ] [ sinθ2 cosθ2  0 ] [ y ] [ 0   0   1  ] [ z ] ↓ ↓ θ1 in zx ↓ [ cosθ1  0   sinθ1 ] [ cosθ2 -sinθ2 0 ] [ x ] [ 0   1   0    ] [ sinθ2 cosθ2  0 ] [ y ] [ -sinθ1 0   cosθ1 ] [ 0   0   1  ] [ z ] 後は、行列の掛け算をするだけです。 パソコンに頼るまでもないですね? θ1 と θ2 のどちらを先に回すかで 結果が異なる点に注意して。

128yen
質問者

お礼

ご回答ありがとうございます。 行列を使えば簡単そうですね。 ただ疑問なのが、θ1とθ2の順番が異なると位置が異なるというのが 理解できません。 どちらが先でも同じ位置に来ると思うのですが・・・ 私は何を勘違いしてるのでしょうか?(^^;;

関連するQ&A