gpt4 book ai didi

c# - 检查 3D 点是否位于给定的 3D 线上(两个 3D 点之间)

转载 作者:行者123 更新时间:2023-11-30 03:26:29 25 4
gpt4 key购买 nike

我有两个 3D 点即。 (x1,y1,z1) 和 (x2,y2,z2) 和一个 3D 点 (x,y,z)。我想知道 (x,y,z) 是否位于连接 (x1,y1,z1) 和 (x2,y2,z2) 的线上。

我尝试了以下算法:

    if ((((x - x1) / x2-x1) == ((y - y1) / y2-y1)) && (((x - x1) / x2 - x1) 
== ((z - z1) / z2- z1)) --> then,the 3D Line intersects (x,y,z)

但是,如果我的 x1 = x2(或)y1 = y2(或)z1=z2 怎么办?然后我会收到一条错误消息,指出“除以零”是不可能的。

如果有人能提出一些替代方法,我会很高兴。

提前致谢。

最佳答案

我会使用 point-line distance测量,如果距离小于接近于零的某个误差阈值,则返回 true。

为了详细说明,我们使用由两点组成的线,p1p2 .我们想知道是否 p3上线了。首先我们找到d使用点到线距离公式。

d = ((p0 - p1).cross(p0 - p2)).length() / (p2 - p1).length()

也就是说,假设您可以使用 + , - , cross , length操作。您可能更愿意查找 d出于性能原因的平方。

d2 = ((p0 - p1).cross(p0 - p2)).lengthSquared() / (p2 - p1).lengthSquared()

现在,如果dd2正好为零,那么您必须在线。但这是浮点运算,所以我会根据您的应用程序留出一些余地。所以本质上,d < 1e6或者什么东西应该可以解决问题。

关于c# - 检查 3D 点是否位于给定的 3D 线上(两个 3D 点之间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48296165/

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