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