web-dev-qa-db-ja.com

3点が同じ線上にあるかどうかを確認しています

2Dスペースの3点が同じ線上にあるかどうかを実際に教えてくれるコードを知りたいのですが。擬似コードでも十分ですが、Pythonの方が適しています。

29
Hossein

ABC三角形の面積が0かどうかを確認できます。

[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2

もちろん、実際に2で除算する必要はありません。

63
florin

これはC++ですが、Pythonに適合させることができます。

bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
  return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}

基本的に、ポイント1とポイント2の間、およびポイント1とポイント3の間の勾配が一致することを確認しています。スロープはyの変化をxの変化で割ったものなので、次のようになります。

y1 - y2     y1 - y3
-------  =  --------
x1 - x2     x1 - x3

クロス乗算は(y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);

ダブルスを使用している場合は、イプシロンに対してチェックできます。

bool collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
  return fabs((y1 - y2) * (x1 - x3) - (y1 - y3) * (x1 - x2)) <= 1e-9;
}
54
dcp

y - y0 = a(x-x0)(1)while a = (y1 - y0)/(x1 - x0) and A(x0, y0)B(x1, y1)C(x2, y2)C statisfies(1)かどうかを確認します。適切な値を置き換えるだけです。

詳細

0

this を読み取り、それを使用して最初の2つの点を通る直線の方程式を見つけます。指示に従ってmbを見つけます。次に、3番目のポイントとして、mx + b - yを計算します。結果がゼロの場合、3番目の点は最初の2つと同じ線上にあります。

0
Douglas

ルール1:任意の線形2次元空間では、2つの点は常に同じ線上にあります。

2点を取り、それらを通る線を表す方程式を作成します。次に、3番目の点もその線上にあるかどうかを確認します。

幸運を。

0
Rob Vermeulen