1. ホーム
  2. python

[解決済み] ある点が線分上の他の2点の間にあると、どのように判断するのでしょうか?

2022-10-22 06:08:42

質問

2次元の平面上に2つの点(a、bと呼ぶ)があり、各点がxの整数とyの整数で表されているとする。

aとbで定義される線分上に別の点cがあるかどうかは、どのように判断すればよいでしょうか。

私はpythonを最も使用していますが、どの言語でも例があれば助かります。

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

を確認します。 クロスプロダクト が0であるかどうかを調べると、Darius Baconが言うように、点a, b, cが一直線上にあるかどうかがわかります。

しかし、cがaとbの間にあるかどうかを知りたいのですから、そのためには ドット積 であり、(b-a) と (c-a) は であり より少ない は a と b の距離の二乗より小さい。

最適化されていない擬似コードでは

def isBetween(a, b, c):
    crossproduct = (c.y - a.y) * (b.x - a.x) - (c.x - a.x) * (b.y - a.y)

    # compare versus epsilon for floating point values, or != 0 if using integers
    if abs(crossproduct) > epsilon:
        return False

    dotproduct = (c.x - a.x) * (b.x - a.x) + (c.y - a.y)*(b.y - a.y)
    if dotproduct < 0:
        return False

    squaredlengthba = (b.x - a.x)*(b.x - a.x) + (b.y - a.y)*(b.y - a.y)
    if dotproduct > squaredlengthba:
        return False

    return True