【发布时间】:2011-08-14 00:35:43
【问题描述】:
我只需要一种方法来告诉我 3D 中的轴对齐边界框是否与线段(不是射线)相交。我不需要交点。
盒子由两个对角定义,线段由起点和终点定义,如下所示:
Boolean intersection(Vector3 boxStart, Vector3 boxEnd, Vector3 segmentStart, Vector3 segmentEnd){...}
我做了很多研究,但还没有找到我可以理解或至少可以使用的代码(希望是 C# 或 Java)。我需要的是方法,而不是能够完成这项工作的库......
我的问题是它需要 100% 精确,并且如果片段刚刚接触到框(即它们共享一个点),它必须返回 false。例如,如果线段是盒子的边缘之一或通过一个角,它们不会相交。
谢谢
【问题讨论】:
-
gamedev.net/topic/338987-aabb---line-segment-intersection-test。如果您想排除“刚刚接触”的情况,请使用
<和>测试。如果要包含它们,请使用<=和>=测试。 -
@Merlyn 对此我唯一不明白的是 epsilon。我找到了,但在我看来它不是 100% 准确的,而且我不知道要使用什么 epsilon...
-
“epsilon 用于处理退化叉积,如果段几乎平行于框轴,就会发生这种情况。” - 如果您可以在不浪费大量周期的情况下检测退化情况,那么您可以避免使用 epsilon。
-
如果段绝对平行怎么办? “几乎平行”的情况并没有让我太担心......如果我要使用它,我该如何定义 epsilon?只是一个双 epsilon = 0.000000000001; ?
-
在 C# 中,
double.Epsilon和float.Epsilon已经定义。不确定Java...
标签: c# java collision-detection computational-geometry aabb