空間上にある点A(x,y,z)をX,Y,Zを基準として(θx、θy、θz)で回転させます。この回転でできた点をBとします。
そのBを同じ様にX,Y,Zで回転させて元へ戻したい場合、
X,Y,Zの順番で回転させているので、
戻すにはZ,Y,Xの順番に回転させればB=Aとなると思います。
tanや内積などを使い、回転角度を考えその角度で回転させることを考えました。
しかし、tanを用いた場合も内積で考えた場合も多少誤差が生じます。(θx=60度になるはずが、計算すると57度になったりする)
正しく回転角度(θx、θy、θz)を求めたい場合はどうすればいいのでしょうか?
一応回転の式はグラフィックス関係の本から調べました。
また自分でθx、θy、θzを入力した場合A=Bとなるので、
式は問題ないと考えています。
現状ではBを逆回転する際のθzを
tan(√(Bx^2+By^2)/√(Bz^2))=θz
Z軸逆回転したものをB'とすればθyは
tan(√(Bx'^2+Bz'^2)/√(By'^2))=θy
さらにY軸逆回転したものをB~とすればθyは
tan(√(By~^2+Bz~^2)/√(Bx~'^2))=θx
となりこれで求める事ができると考えています。
内積で考えた場合は内積の式からcosθを求め、acos(cosθ)で求めています。
長々とすみませんが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
4×4行列を使って回転や平行移動の座標変換が出来ます。
逆行列を求めて同じ側から逆にかけてやれば、元に戻せます。
参考URLに詳しく載っています。
X,Y,Z軸の順に回転移動する行列もその順にかけてやれば
[x,y,z]・A・B・C=(x,y,z)・M=[x1,y1,y2]
M=A・B・C
AはX軸の周りの回転行列、BはY軸の周りの回転行列、
CはZ軸の周りの回転行列
とすれば、Mは一気に3軸の周りの回転を行う行列になります。
[x1,y1,z1]は回転移動後の座標です。
逆にMの逆行列N=M^-1を[x1,y1,z1]にかけてやれば元の座標に戻す事が出来ます。
[x,y,z]=[x1,y1,z1]・N
また、A,B,Cの逆行列をD=A^-1,E=B^-1,F=C^-1とおけば
N=M^-1=F・E・Dの関係にあります。つまり、
[x,y,z]=[x1,y1,z1]・N=[x1,y1,z1]・F・E・D
という関係にあると言うことですね。
逆順に逆行列を掛けてやれば元の座標が得られますは、
一回一回逆行列を求める手間を省くには
M=A・B・C
を求めておいて、その逆行列N
N=M^-1
を移動後の点の座標行列(座標ベクトル)に掛けてやれば元に戻せるという事ですね。
[x,y,z]=[x1,y1,z1]・N
の計算で正確に元に戻せますよ。
僕はこの行列演算をMapleなどの数式処理ソフトを使ってやっていますが、すぐに座標変換がすぐ出てきます。
三次元プロットすると移動の過程も確認できます。
参考URL:http://www.ceres.dti.ne.jp/~ykuroda/oyaj/bone/ba …
この回答への補足
info22 様
ご回答ありがとうございます。
そうですね、確かにその方法で行えば元に戻ると考えています。
しかしその際に必要なsin・cosのθ(回転する角度)が
分かっていると実行できると思うのですが・・・(もしかして私は勘違いしてるのでしょうか?)
たとえば、[x,y,z]を A(θx=30°) B(θy=45°) C(θz=60°)で回転させてできた[x1,y1,z1]を
F(A^-1),E(B^-1),D(C^-1) の順番にかけて[x,y,z]とする際に必要な回転角度θが
分からないとなると、計算して求めないといけないと思います。
そのθを求める方法がどう考えてもわからないのです。
それともθは関係なく、Mの逆行列であるN(M^-1)で求められるのでしょうか?
数式処理ソフトなどを使わずにプログラミング(C言語)で計算したいのです。
回転の式(これは理解しました)と角度を求める式(???)
が分かればプログラムを書く事はできるのですが・・・。
No.4
- 回答日時:
> Mを求めると
> [cosθy*socθz cosθy*sinθz -sinθy]
> [sinθx*sinθy*cosθz-cosθx*sinθz sinθx*sinθy*sinθz+cosθx*cosθy sinθx*cosθy]
>[cosθx*sinθy*cosθz+sinθx*sinθz cosθx*sinθy*sinθz-sinθx*cosθz cosθx*cosθy]
の2行2列要素に転記ミスがありますので確認下さい。
sinθx*sinθy*sinθz+cosθx*cosθz
> このθx,θy,θzがそれぞれ同じ場合はできると思いますが、
>バラバラな場合の一度に戻るイメージがどうしてもわきません。
イメージがわかなければ具体的な分かりやすいケースを幾通りか当てはめて確認するのが良いと思います。
僕は点(x,y,z)のベクトルをA#1の参考URLにあるようにベクトル(x,y,z,1)にして4行4列の行列で扱って確認していますが、平行移動が伴わない場合は、A#1~A#3で扱っているように点ベクトルを(x,y,z),回転行列を3行3列で扱って構わないでしょう。
なお、行列A,B,C,D,E,F,M,Nの行列式の値は全て1になります。
No.3
- 回答日時:
補足はこのサイトだけでなく、ネット上のGoogle他、多数の検索エンジンから検索がかかりますので、このサイトだけで使っている、このサイトのニックネームが公開されてしまいますので、解答欄や補足の中にニックネームを書かないことが常識のマナーです。
これから私だけでなく、他の回答者のニックネームは書き込まないようにして下さい。指定する場合はNo1さんとか、#2さんのA#2の回答中…のように引用下さい。
本題に帰って、A#1の参考URLの中の各軸の周りの回転行列の逆行列を求めていただけば、元の回転行列のθを「-θ」に下だけのものになりますし、平行移動の行列の逆行列も移動量がマイナスになるだけです。
あえて計算で出すなら、回転角θ'の逆行列Fと元の回転の行列Aの回転角θとして、行列要素を全て等しいとおけば、
-sinθ'=sinθ、cosθ'=cosθ
という関係式が出てきます。これを満たすθ'は
θ'=-θ
という結果が出てくるだけです。
難しい式を解かないと出てこないという先入観をお持ちではないでしょうか?
この回答への補足
ANo.3様
ご回答ありがとうございます。
まず、ニックネームについて大変申し訳ございません。
自分の事ばかり先行し、気付けていませんでした。
これからこのような事が決してない様にします。
本当にすみませんでした。
本題なのですが、
[x,y,z]・A・B・C=(x,y,z)・M=[x1,y1,y2]
とした場合でも(θA、θB、θCはそれぞればらばらです)
[x,y,z]=[x1,y1,z1]・N
N=(F・E・D)
Mを求めると
[cosθy*socθz cosθy*sinθz -sinθy]
[sinθx*sinθy*cosθz-cosθx*sinθz sinθx*sinθy*sinθz+cosθx*cosθy sinθx*cosθy]
[cosθx*sinθy*cosθz+sinθx*sinθz cosθx*sinθy*sinθz-sinθx*cosθz cosθx*cosθy]
となると思います。
このθx,θy,θzがそれぞれ同じ場合はできると思いますが、
バラバラな場合の一度に戻るイメージがどうしてもわきません。
No.2
- 回答日時:
#1です。
>たとえば、[x,y,z]を A(θx=30°) B(θy=45°) C(θz=60°)で
>回転させてできた[x1,y1,z1]を
>F(A^-1),E(B^-1),D(C^-1) の順番にかけて[x,y,z]とする際に必要
>な回転角度θが
> 分からないとなると、計算して求めないといけないと思います。
> そのθを求める方法がどう考えてもわからないのです。
角度はマイナスをつけてD(θz=-60°),E(θy=-45°),F(θx=-30°)
の順にすれば良いですね。符号が変わるだけで求める必要ないですね。
ちゃんと逆行列を計算すれば分かる事です。解答を読むだけでなく少しは手を動かして逆行列を計算してみてください。(#そうすればつまらない質問をしたりしなくて済みますよ。)
> それともθは関係なく、Mの逆行列であるN(M^-1)で求められるのでしょうか?
勿論、求まります。
> 数式処理ソフトなどを使わずにプログラミング(C言語)で計算したいのです。
> 回転の式(これは理解しました)と角度を求める式(???)
> が分かればプログラムを書く事はできるのですが・・・。
角度はマイナスの符号をつけるだけですから角度を求める式は
あえて言えば
θ'=-θ
ですね。
この回答への補足
info22 様
続けてご回答ありがとうございます。
言い方がおかしかったようで、すみません。
今は回転の式や手順を理解するために、自分で各θの値を入れて計算しています。
最終的には
A=[x,y,z]
B=[x1,y1,z1]
この2つの点があるとします。
この点Bを平行移動や回転をして、点Aと同じ場所に持ってきたいと考えています。
(AとBの各成分がイコールとなり、空間上で重ねたいです。)
となると、各回転角度(θ)は入力していないため(わからないため)、計算して求めないといけないと思います。
そこで回転角度となる各θを求める方法について質問させていただきました。
回答者様のおっしゃるとおり、同じ各θで逆回転させれば、プログラムでもエクセルでもまったく同じ座標を求める事
ができることは以前からわかっています。
ですので、[x,y,z]を A(θx) B(θy) C(θz)で回転させできた[x',y',z']を
逆回転となるD(-θx) ,E(-θy),F(-θz)の各θを計算により求めることができればいいのですが・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 角速度ベクトルにつきまして 3 2022/08/09 15:44
- 物理学 力学の微分の質問です。 答えを教えてください。至急です。 問題1ある軸の上を並進運動している物体の位 2 2023/01/31 15:10
- 数学 x軸をまたぐ場合について考えてます。 それぞれ体積、表面積の立式は合ってますか? y=b±√(a 2 2023/05/21 17:05
- 物理学 磁束密度Bの一様な磁場中に, 半径aの円板がその面と磁場が直交するように置かれ、中心軸のまわりに角速 4 2022/12/14 23:52
- 物理学 原点中心とする半径10cmの演習上、質点が1分間に600回の割合で反時計回りに運動している。 (1) 4 2023/05/29 12:46
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- 物理学 電磁気学 磁気物理学 磁気モーメント 2 2022/10/18 22:19
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- 物理学 力学的エネルギー保存則について 4 2023/06/06 14:02
- その他(自然科学) 風車音の測定 3 2023/04/28 07:12
このQ&Aを見た人はこんなQ&Aも見ています
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
e^iθの大きさ
-
ドモアブルの定理はサインまた...
-
数学の質問です。 sinθ+cosθ=√2...
-
sinθ-√3cosθをrsin(θ+α)の形...
-
3次元ベクトルをある軸ベクトル...
-
高1 数学 sin cos tan の場所っ...
-
どこまで覚えておくべき?
-
tanθ=2分の1のときの sinθとcos...
-
sin cos tan の問題について
-
3辺の比率が3:4:5である直...
-
アークサインの微分
-
eのiθ乗のバーは?
-
次の関数を微分せよ y=sin^4 x ...
-
cos2分のπ= cos−2分のπ= sin2...
-
sin(ωt+θ) のラプラス変換
-
θが鈍角のとき、sinθ=4分の3の...
-
空間での座標回転角度の求め方とは
-
三角形をθで表す。
-
教えてください!!
-
画像のように、マイナスをsinの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
e^iθの大きさ
-
高1 数学 sin cos tan の場所っ...
-
3辺の比率が3:4:5である直...
-
sin2xの微分について
-
アークサインの微分
-
画像のように、マイナスをsinの...
-
教えてください!!
-
加法定理の応用問題でcosα=√1-s...
-
この問題の半径rと中心核αの扇...
-
式の導出過程を
-
tanθ=2分の1のときの sinθとcos...
-
∫sin^2x/cos^3xdxの解き方が...
-
cos18°の求め方
-
sin(ωt+θ) のラプラス変換
-
数学の問題で。。。0<θ<90 Sin...
-
数学 2次曲線(楕円)の傾きの計...
-
三角関数の加法定理について
-
力学・くさび
-
複素数表示をフェーザ表示で表...
-
次の三角比を45°以下の角の三角...
おすすめ情報