AABB上距离点最近的距离、AABB与球相交检测
AABB 即轴对其矩形边界框(每一条边都平行于坐标轴的矩形边界框),2D中为无旋转的 矩形,3D中为无旋转的六面体,长宽高可以各不相同。
AABB内的点满足以下条件
Xmin < X < Xmax
Ymin < Y < Ymax
Zmin < Z < Zmax
两个重要的点
Pmin = (Xmin, Ymin, Zmin)
Pmax = (Xmax, Ymax, Zmax)
中心点C
C = (Pmin + Pmax) / 2
求AABB中与给定点 P(X,Y,Z)距离最近的点的坐标?
设B是由极值点Pmin和Pmax定义的AABB,对任意点P都能很容易的计算出在B上距离P最近的点P’ ,所用的方法是按一定顺序沿着每条轴将P“推向”B。
下面代码逻辑以 3D为例,如果是2D 中则将下面代码中 Z值得判断删掉即可
if (X < Xmin){
X = Xmin;
}
else if (X > Xmax){
X = Xmax;
}
if (Y < Ymin){
Y = Ymin;
}
else if (Y > Ymax){
Y = Ymax;
}
if (Z < Zmin){
Z = Zmin;
}
else if (Z > Zmax){
Z = Zmax;
}
经过上边几次比较赋值,得到AABB中距离点P最近的点P’(X,Y,Z)
则 PP’ 的长度就是点 P 到矩形 AABB的距离。
点是无大小的,由点可以引出一个球。球:距离一个点距离小于等于规定值R得所有点的集合。
上边我们求出了点P 到AABB的距离,那么如果一个以点P为中心,半径长为R的球,是否和AABB相交?
判断条件:
如果 PP’ 长度小于等于 R 则 球与AABB相交
如果 PP’ 长度大于R 则球与AABB不相交
一般为了避免开平方根的计算,会使用距离的平方作比较