>>240追記
進行方向修正で左右を判別するなら90度回転して内積つかうよりも直接外積使った方がいいですよ。
正確には2Dでは外積そのものは定義できないので「外積の大きさ」を使うことになりますが。
atanは無罪ですね。でもatanよりatan2使った方が良くないですか?
atanだと第一象限と第四象限の角度しか返さないので補正に一手間必要ですが、atan2だと全象限カバーできますし。
そのあたり実際にベンチマークが必要ですね・・・