检查点 (x,y) 在直线上绘制的两点之间

新手上路,请多包涵

我在两点 A(x,y)—B(x,y) 之间画了一条线 现在我有了第三个点 C(x,y)。我想知道 C 是否位于 A 和 B 之间的连线上。我想用 Java 语言来做。我找到了几个与此类似的答案。但是,都有一些问题,没有人是完美的。

原文由 Usman Mahmood 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
1 个回答
if (distance(A, C) + distance(B, C) == distance(A, B))
    return true; // C is on the line.
return false;    // C is not on the line.

要不就:

 return distance(A, C) + distance(B, C) == distance(A, B);

它的工作方式相当简单。如果 C 位于 AB 行,您将得到以下场景:

 A-C------B

并且,无论它位于该行的何处, dist(AC) + dist(CB) == dist(AB) 。对于任何其他情况,你有一个三角形的一些描述和’dist(AC) + dist(CB) > dist(AB)‘:

 A-----B
 \   /
  \ /
   C

事实上,如果 C 位于外推线上,这甚至有效:

 C---A-------B

前提是距离保持无符号。距离 dist(AB) 可以计算为:

   ___________________________
 /           2              2
V (A.x - B.x)  + (A.y - B.y)

请记住浮点运算的固有局限性(精度有限)。您可能需要选择“足够接近”的测试(例如,误差小于百万分之一)以确保等式的正确运行。

原文由 WoooHaaaa 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题