gpt4 book ai didi

java - 检查一个点是否在两个点之间

转载 作者:行者123 更新时间:2023-11-29 05:39:27 26 4
gpt4 key购买 nike

我刚刚意识到我的数学有点生疏。我想检查 Point C 是否在 Point A 和 Point B 之间。 C可以在A和B的线段上,也可以不在。可能存在三种情况,我必须识别所有这些情况:

  • C在A和B之间

       C  
    / \
    A---B
  • C在A和B前面

    C  
    \ \
    A--B
  • C在A和B的后面

           C  
    / /
    A--B

最后两点的“草图”应该是三角形。

我使用点积来检查 C 是否在 A 和 B 之间。

if (VectorOf(AB) * VectorOf(BC)) >= 0)

要检查 C 是否在 A 和 B 的后面,我使用这个:

if (VectorOf(AB) * VectorOf(BC)) < 0)

但是如何判断C是否在A、B前面呢?

最佳答案

只需使用从 B 点开始的点积即可。

if (VectorOf(AC) * VectorOf(AB) < 0) {
// C is on the left of A
}
else {
if (VectorOf(BC) * VectorOf(BA) < 0) {
// C is on the right of B
}
else {
// C is between A and B
}
}

或者,您可以计算相对于 vector AB 的投影距离:

(VectorOf(AC) * VectorOf(AB)) / (VectorOf(AB) * VectorOf(AB))

在您的三种情况下,结果将是 < 0,介于 0 和 1 之间,或 > 1,如下面的数学所示:

      C
/│
/ │
/ │
──A── H ─────B─────

点积的定义是

AC · AB = AC×AB×cos(Â) = AH×AB对)。

AB · AB = AB²(阳性)

除法的结果是有符号的比率 AH/AB :

-   0          1   >1
────A── H ─────B─────

关于java - 检查一个点是否在两个点之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com