線分上の 2 つの点の間にある点をどのように判断すればよいでしょうか? 質問する

線分上の 2 つの点の間にある点をどのように判断すればよいでしょうか? 質問する

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

別の点 c が a と b によって定義される線分上にあるかどうかをどのように判断できますか?

私は主に Python を使用しますが、どの言語の例でも役立ちます。

ベストアンサー1

確認してくださいクロス積(ba) と (ca) の和が 0 であれば、ダリウス・ベーコンが言うように、点 a、b、c が揃っているかどうかがわかります。

しかし、cがaとbの間にあるかどうかを知りたい場合は、ドット積(ba)と(ca)はポジティブそして少ないa と b の間の距離の 2 乗よりも大きい。

最適化されていない疑似コードの場合:

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

おすすめ記事