LoginSignup
2
2

More than 5 years have passed since last update.

C > 幾何学 > 角度の重なりチェック > 外積使用 > 破綻

Last updated at Posted at 2016-06-10

問題

  • 角度範囲A,B,C,Dがある
  • それぞれ角度の最小と最大の値は [0,360)が入る

A,B,C,Dの角度領域が重なっていないかを確認する

方法(案)

以下、間違っているかもしれない。

外積

外積

角度範囲A内のベクトルAvecと角度範囲B内のベクトルBvecの外積は

Avec \times Bvec = (a_x b_y - a_y b_x) 

重なりチェックのパターン

以下の6通りのチェックを行う

  • A, Bの重なり
  • A, Cの重なり
  • A, Dの重なり
  • B, Cの重なり
  • B, Dの重なり
  • C, Dの重なり

重なりのチェック

例として角度範囲A, Bの重なりのチェックをする場合

以下のxは外積

  • Amin x Bmin と Amin x Bmaxの符号が同じ
  • Amax x Bmin と Amax x Bmaxの符号が同じ

これを上記の6通りでチェックすれば重なりがあるか確認できるはず。

確認

(2016/06/12追記)

ベクトルV に対して、角度範囲A [0,90]を検討してみる。

Aminのベクトル bx = 0, by = 1
Amaxのベクトル bx = 1, by = 0

ベクトルVが vx = 1, vy = 1の時

VとAminの外積: vx by - vy bx = 1*1 - 1*0 = 1
VとAmaxの外積: vx by - vy bx = 1*0 - 1*1 = -1

上記2つの外積の符号が異なるのでVはAmin,Amaxの範囲に含まれる。

これは意図通り

ベクトルVが vx = -1, vy = -1の時

VとAminの外積: vx by - vy bx = -1*1 - (-1)*0 = -1
VとAmaxの外積: vx by - vy bx = -1*0 - (-1)*1 = +1

上記2つの外積の符号が異なる、Amin,Amaxの範囲に含まれるように思えるが、実際にはVはAmin,Amaxの範囲の外側にある。

破綻した。

別の方法

外積でなくclockwiseの角度の大小比較に方針を変える

重なりのチェック

(2016/06/12追記)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2