gpt4 book ai didi

vector - 检查点是否位于线向量上

转载 作者:行者123 更新时间:2023-12-04 21:45:22 26 4
gpt4 key购买 nike

要在 v 方向通过点 p 的直线上获得另一个点 (r),我们可以使用以下公式,并将任何值替换为 a:

r = p + a*v

要测试r是否在线,我们必须只为a找到一个满足的值。在我当前的实现中,我通过将 r 的方程重组为:

来检查向量的每个分量的 a 是否相同:

a = px - rx / vx

在代码方面,这看起来像下面这样:

boolean isPointOnLine(Vector2f r, Vector2f p, Vector2f v) {
return (p.x - r.x) / v.x == (p.y - r.y) / v.y;
}

但是,此方法不起作用:如果 v 的任何分量为 0,则分数将计算为无穷大。因此我们得到了错误的结果。

如何检查r是否正确上线?

最佳答案

在 3D 中您执行以下操作:

如果点 r=(x,y,z)p=(px,py,pz) 直线上的另一个点和v=(vx,vy,vz)方向计算如下

CROSS(v,r-p)=0

或按组件

(py-ry)*vz - (pz-rz)*vy==0
(pz-rz)*vx - (px-rx)*vz==0
(px-rx)*vy - (py-ry)*vx==0

对于2D 版本,使所有z 分量为零

(px-rx)*vy - (py-ry)*vx == 0

不需要除法,没有边缘情况和简单的快速乘法。

当然,由于四舍五入,结果永远不会正好为零。所以你需要的是最小距离的公式,并检查距离是否在某个公差范围内

d = ((px-rx)*vy-(py-ry)*vx)/sqrt(vx*vx+vy*vy) <= tol

关于vector - 检查点是否位于线向量上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48488101/

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