計算幾何学 ベクトルの時計回り判定

ベクトル時計回り判定

ベクトル時計回り判定
Feb. 2, 2020, 1:52 p.m.

目次

解説

反時計回り、時計回り、同直線上はベクトルの外積を計算することですぐに分かる.
外積が負なら時計回り、0なら同直線上、正なら反時計回り.
同直線上の場合は外積だけではこれ以上は分からない.
内積を計算することで内積が負なら正反対の向き、正なら同じ向きだと判定できる.

コード

位置ベクトルを2つ受け取り、位置関係を表す整数を返す.

  1. 0: 反時計回り
  2. 1: 時計回り
  3. 2: 正反対
  4. 3: 同じ方向
1
2
3
4
5
6
7
8
9
int clockwise(Vector2 &v01, Vector2 &v02) {
  double cross_ = v01.cross(v02);
  if (cross_ > 0.0) return 0;
  else if (cross_ < 0.0) return 1;

  double dot_ = v01.dot(v02);
  if (v01.dot(v02) < 0.0) return 2;
  return 3;
}