yu/logs/*

技術メモ など

AtCoder ABC266 C 解法メモ 2点のなす角が180度未満かどうか判定したい

基本は公式解説の通りですが、自分の言葉で整理しておきたいなというメモです。数学が弱い。

解いていた問題と解説

atcoder.jp

atcoder.jp

解法メモ

結論

  • 外積の正負を使って判定する

導出

  • ベクトルa, bの外積は平行四辺形の面積の絶対値と等しい
  • 外積
    • a=(a1, a2, a3), b=(b1, b2, b3)のとき
    • a×b = (a2b3 - a3b2, a3b1 - a1b3, a1b2 - a2b1)
    • 平面上の2点(Ax, Ay, 0), (Bx, By, 0)を考えると、a×b = (0, 0, AxBy - AyBx)となる
  • なす角について

    • 180度であれば外積は0(平行四辺形をなさないので)
    • 180度未満であれば外積は正の値
    • 180度より大きければ外積は負の値
    • となる
    • a×b = -b×a
  • 上記から平面座標上の2点(Ax, Ay), (Bx, By)は、

    • AxBy - AyBxが・・・
      • 正の値・・・180度未満
      • 負の値・・・180度より大きい
    • と判断できる

提出した回答

Submission #34414518 - AtCoder Beginner Contest 266