座標を回転させる方法

MDSで二次元座標を作った。実験前と実験後の態度変容を見るために,2つのマップを書いたのだけどマップA→マップBにかわった,ということがわかるためにマップ内のある点p→p’を重ねて,他の座標がどう変わるかを見ようと思った。図は原点を中心にした点対象だから,ぐるぐる回せるのだね。つまり,p→p’の二つのベクトルから回転角を導いて,pre座標にかければよい。
ここまではすぐわかったのだけど,2つのベクトルがなす角ってどうやって算出するんだ,というところで手が止まってしまった。基礎的な素養がないとこういうときに困るのだね。

Twitter上で困ったなぁ,誰かわかる人募集,と呟いていたら,@masashikomoriさんが教えてくれました。感謝。
実は教えてもらってもすぐにできなくて,「あれ?回転させたはずなのに一致しないな」となったところ「反対回りになってないかチェックしてね」「ノルムを合わせないと」と丁寧にフォローしてくれました。で,できた答えがこれ。

ありがとうございました。

実際やりたかったことは,MDSの座標をつかうので,どの要素でも良いから1つ合わせるところを決めて回せばよかったのです。で,関数を作ってみた。

関数rotateConfigには,元の座標(pre),目的座標(post)に座標を入れて,何行目の要素で合わせるのかを指定し(key),ノルムをそろえるかどうか(norm.adj,デフォルトはFALSE),逆回転するかどうか(rev,デフォルトはFALSE((角度だけだとどっち向きかわからなくて,合わないこともある。合わなかったら逆を算出するようオプションをつけた。ホントはこれを自動化したいのだけど,時間が無かった。)))を指定すると,全体が回転された座標が返ってくるというもの。自慢になる関数ではないが,備忘録として書いておく。

コメントは受け付けていません。