1. ホーム
  2. c#

[解決済み] ある点が直線の右側にあるか左側にあるかの見分け方

2022-04-27 11:04:57

質問

点の集合があります。それらを2つの異なる集合に分けたい。これを行うには、2つの点( a b ) を作成し、その間に想像上の直線を引きます。ここで、この線から左にある点を1つの集合に、この線から右にある点をもう1つの集合にしたいと思います。

どのようにすれば、任意の点 z を、左セットなのか右セットなのか?との間の角度を計算してみました。 a-z-b - しかし、ArcCos の定義により、計算された角度は常に 180° よりも小さくなります。180°より大きい角度を計算する公式はないのでしょうか(右辺、左辺を選択する他の公式もあります)。

どのように解決するのですか?

ベクトルの行列式の符号を利用する (AB,AM) ここで M(X,Y) はクエリポイントである。

position = sign((Bx - Ax) * (Y - Ay) - (By - Ay) * (X - Ax))

それは 0 をライン上に配置し +1 を片側に配置します。 -1 を反対側へ。