在平截头体交叉点测试轴对齐框(AAB)

时间:2015-11-06 23:57:34

标签: math collision-detection

我阅读了this教程进行了aabb-plane测试,而且我无法理解"优化" aabb-plane测试描述。

在"几何方法 - 测试盒II",我理解一切,直到这一行:

  

假设AAB的组分x,y和z在xmin之间变化   和xmax; ymin和ymax;和zmin和zmax。的组成部分   选择正顶点p如下:...

我也没有得到之后的代码。 我的AABB对象由它们的minVertex,maxVertex参数定义。

你能解释一下作者的意思吗?

1 个答案:

答案 0 :(得分:1)

考虑以下图片,其中对角线PS(假设)与normal向量平行(BTW,这是教程称之为AAB的情况)。这张图片代表了问题的2D版本,其中的想法更容易解释和理解。

2D version of the problem

根据定义,p-vertex是与法线方向进一步对齐的R - Q, Q - R, P - S or S - P (1) 。这意味着您必须确定以下四个向量中的哪一个与法线进一步对齐:

S - P

在这种情况下,答案为S,这意味着p-vertexPn-vertex(xn, yn)。但问题是如何以编程方式检测它。

嗯,两个向量之间的dot product测量其中一个向量的投影到另一个向量,因此问题可以重新表述为:(1)中的哪个向量具有正态的最大点积{ {1}}?

以下是四点产品:

(xn, yn).(R - Q) = xn(x1 - x2) + yn(y1 - y2)
(xn, yn).(Q - R) = xn(x2 - x1) + yn(y2 - y1)
(xn, yn).(P - S) = xn(x1 - x2) + yn(y2 - y1)
(xn, yn).(S - P) = xn(x2 - x1) + yn(y1 - y2)

所以,我们正在寻找的那个是使得两个项的总和为正的,这是

  • 如果xn > 0选择x2 - x1>0),则x1 - x2<0
  • 如果yn > 0选择y2 - y1>0),则y1 - y2<0

原因是符号规则(++ = +-- = +。)

所有这些都转化为

  1. p-vertex = (x1, y1)
  2. 开头
  3. 如果xn > 0,则使用x1更改x2(有效地离开p-vertex = (x2, y1)
  4. 如果yn > 0,则使用y1更改y2(有效地离开p-vertex = (x*, y2)
  5. (在第3步中,x*x1x2,具体取决于setp 2的结果。

    如果您处于3个维度,这些参数仍然有效。唯一的区别是你必须在任何地方添加z坐标。