ボブがぐるりと回って目標を「見た」としよう。どうやってそれを判定すれば良いか。言い換えれば、ボブの見ている方向と目標の方向の角度がどれくらい違うのかをどうやったら知る事が出来るだろうか。
以前 http://d.hatena.ne.jp/propella/20050403/p2 点の回転という事をやって、これは実は角度を足しているのと同じ事だと大島さんのコメントで分かったのだが、今度は角度を引けば良い事が分かる。で、またもやチマチマ図を描いて考えていたのだが何度やっても計算間違いをするので、手抜きで前考えたやつに mathematica で式を変形する事にした。
In := Solve[ {Qx == Rx Px - Ry Py, Qy == Ry Px + Rx Py, Px^2 + Py^2 == 1}, {Rx, Ry}] Out := {{Rx -> Px Qx + Py Qy, Ry -> -Py Qx + Px Qy}}
実際には右か左かが分かれば良いだけなので、方向ベクトルの y 成分だけを見れば良い。これでまんまと上手く言った。しかし、どこかで見たことのある式だなーと思ってクラスブラウザを探索すると、-Py Qx + Px Qy の部分はそのまんま crossProduct: (外積) と呼ばれるメソッドだった。これも大昔高校で習った気がするが、多分その時は全く意味が分かってなかったのだろう。