gpt4 book ai didi

3d - 相交的 3D 线段

转载 作者:行者123 更新时间:2023-12-01 22:25:53 26 4
gpt4 key购买 nike

给定每条线的起点和终点的 XYZ 坐标,如何确定两条 3D 线段是否相交?如果它们确实相交,在什么 XYZ 位置?

我只能找到 2D 的答案:How do you detect where two line segments intersect?

最佳答案

设起点为P0、Q0,终点为P1、Q1。

Direction vectors
DP = P1 - P0
DQ = Q1 - Q0
start difference vector
PQ = Q0 - P0

参数形式的片段:

P = P0 + t * DP
Q = Q0 + u * DQ

寻找值(value)

a = Dot(DP, DP)
b = Dot(DP, DQ)
c = Dot(DQ, DQ)
d = Dot(DP, PQ)
e = Dot(DQ, PQ)

求判别式

DD = a * c- b * b

如果 DD = 0,则线段平行,并考虑(部分)重合的特殊情况,否则

寻找直线上最近点的参数

tt = (b * e - c * d) / DD
uu = (a * e - b * d) / DD

如果任何参数超出范围 0..1,则线段不相交,否则

求点与点之间的距离

 P(tt) = P0 + tt * DP
Q(uu) = Q0 + uu * DQ
Dist = Length(Q(uu) - P(tt))

如果 Dist 为零(或由于数值错误而小于某个小的 Epsilon 值,如 1.0E-12),则线段相交于此点 P(tt)

关于3d - 相交的 3D 线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34602761/

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