两个物体的横向范围重叠,并不表示旋转后的形状一定碰到。对于矩形,可以在双方边的法线方向上分别观察投影;找到一个分开的方向,就能排除相交。
本例矩形由中心和两条互相垂直的半边向量组成,四角是中心加减这两条向量。对每条半边取垂直向量作为轴,把所有角点与轴做点积得到投影区间。要求所有轴的区间都有严格正长度重叠,边或角仅仅接触不算进入。
本例输入与约定
六组互相独立的矩形比较。下表中心及半边向量格式均为横、纵坐标。
完整计算记录
第1组输入:[{'center': [2, 10], 'u': [8, -6], 'v': [3, 4]}, {'center': [4, 0], 'u': [1, 0], 'v': [0, 2]}] 各轴投影与正重叠:[[[6, 8], [[42, 142], [2, 46]], True], [[-4, 3], [[-28, 72], [-26, -6]], True], [[0, 1], [[0, 20], [-2, 2]], True], [[-2, 0], [[-26, 18], [-10, -6]], True]] 内部相交:True 第2组输入:[{'center': [10, 5], 'u': [4, -3], 'v': [3, 4]}, {'center': [-4, -4], 'u': [8, -6], 'v': [9, 12]}] 各轴投影与正重叠:[[[3, 4], [[25, 75], [-103, 47]], True], [[-4, 3], [[-50, 0], [-46, 54]], True], [[6, 8], [[50, 150], [-206, 94]], True], [[-12, 9], [[-150, 0], [-138, 162]], True]] 内部相交:True 第3组输入:[{'center': [-8, 8], 'u': [1, 0], 'v': [0, 2]}, {'center': [0, 4], 'u': [12, -9], 'v': [6, 8]}] 各轴投影与正重叠:[[[0, 1], [[6, 10], [-13, 21]], True], [[-2, 0], [[14, 18], [-36, 36]], True], [[9, 12], [[-9, 57], [-102, 198]], True], [[-8, 6], [[92, 132], [-126, 174]], True]] 内部相交:True 第4组输入:[{'center': [-6, 7], 'u': [1, 0], 'v': [0, 2]}, {'center': [10, 9], 'u': [1, 0], 'v': [0, 1]}] 各轴投影与正重叠:[[[0, 1], [[5, 9], [8, 10]], True], [[-2, 0], [[10, 14], [-22, -18]], False], [[0, 1], [[5, 9], [8, 10]], True], [[-1, 0], [[5, 7], [-11, -9]], False]] 内部相交:False 第5组输入:[{'center': [0, -9], 'u': [3, 0], 'v': [0, 3]}, {'center': [-2, -8], 'u': [4, -3], 'v': [9, 12]}] 各轴投影与正重叠:[[[0, 3], [[-36, -18], [-69, 21]], True], [[-3, 0], [[-9, 9], [-33, 45]], True], [[3, 4], [[-57, -15], [-113, 37]], True], [[-12, 9], [[-144, -18], [-123, 27]], True]] 内部相交:True 第6组输入:[{'center': [-7, -3], 'u': [4, -3], 'v': [3, 4]}, {'center': [-2, 10], 'u': [3, 0], 'v': [0, 2]}] 各轴投影与正重叠:[[[3, 4], [[-58, -8], [17, 51]], False], [[-4, 3], [[-6, 44], [20, 56]], True], [[0, 3], [[-30, 12], [24, 36]], False], [[-2, 0], [[0, 28], [-2, 10]], True]] 内部相交:False表中编号仅用于识别本例的元素。读取一个结果时,应先核对它对应的输入、处理顺序和边界约定;布尔值表示条件是否成立,空集合表示没有符合要求的对象,不应把这些字段混成同一种数值。
复核方法与适用范围
轴向量不用单位化,因为同一轴上双方投影会乘同一个正尺度。要检查双方提供的全部方向,不能只取一个矩形的方向;相同轴重复检查不会改变结论。
这里适用于非退化凸矩形,没有旋转扫掠和时间维度。一次检查只描述当前姿态,快速运动中的穿越仍需额外处理;表中布尔结果也不提供应把物体向哪边推出的完整响应。
练习时可以先独立计算最前面的一步,再检查最后的整体不变量。若结论不同,应保留各步记录,定位第一处差异;只调整最终数字会掩盖规则理解上的问题。改变输入后也要重新演算,而不是照抄这一例的输出。
![九游会招商[J9总代理]招商合作官方网站](https://agent-j9iuyouhui-j9.com/upload/image/jiu-you-hui-zhao-shang-J9-zong-dai-li-zhao-shang-he-zuo-guan-fang-wang-zhan-logo.webp)