gpt4 book ai didi

javascript - 检测一个点是否属于线段

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:57 25 4
gpt4 key购买 nike

如果我有一条线,带有点 x、y、endx 和 endy,我如何检测线上是否有另一个点?一个简单的方程式,或者 JavaScript 或伪代码中的示例函数将是最有帮助的。

编辑:这是我正在开发的游戏,我正在尝试检测激光是否与物体发生碰撞,这是示例 http://jefnull.com/references/lasers/最具描述性的文件是 http://jefnull.com/references/lasers/lasers.js

最佳答案

因为我之前的回答说如何确定一个点是否在在线线上,而真正的问题似乎是“我如何判断该点是否在附近 ”行,我正在添加一个新答案。

诀窍是:首先找出障碍物到线段两个端点的距离。这两个距离并不能唯一确定障碍物的位置,但它们确实唯一确定了一个具有三个特定边长的三 Angular 形,然后我们可以立即使用一堆几何图形。

Triangle with sides A, B, C

我稍微调整了一下颜色。不管怎样,我在上面的评论中提到你应该使用 point-line distance计算障碍物和直线之间距离的公式。但这实际上行不通。原因是它是点-线距离。因此,对于下面的两个示例,该公式将计算图片中的粗体距离 H

Acute and Obtuse Triangle Diagrams

这是不对的!!

因此,下面是伪代码,用于计算从障碍物到激光形成的线段的距离:

Find the distance from my point to the line segment!

if the angle at (x,y) is obtuse
return A
else if the angle at (endx,endy) is obtuse
return B
else
return H

这是您可以用来实现上述伪代码的数学:

  • 要查看 (x,y) 处的 Angular 是否为钝 Angular ,请找到是否 B^2 > A^2 + C^2。如果是这样,则 Angular 是钝 Angular 。
  • 要查看 (endx, endy) 处的 Angular 是否钝 Angular ,请找到是否 A^2 > B^2 + C^2。如果是这样,则 Angular 是钝 Angular 。
  • 要计算 H,请使用两种不同的方法来计算三 Angular 形的面积 - 通常的 base*height/2Heron's Formula .

这意味着你应该:

set s = (A+B+C)/2
The area of the triangle is C*H/2
The area of the triangle is also sqrt(s*(s-A)*(s-B)*(s-C))
So H = 2/C * sqrt(s*(s-A)*(s-B)*(s-C)).

最终结果是这样的:

if B^2 > A^2 + C^2
return A
else if A^2 > B^2 + C^2
return B
else
s = (A+B+C)/2
return 2/C * sqrt(s*(s-A)*(s-B)*(s-C))

我认为这应该足以让您完成您实际打算要做的事情。祝你好运,不要放弃!

关于javascript - 检测一个点是否属于线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865832/

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