我已经在java中实现了分离轴定理。碰撞检测本身效果很好。但是在解决碰撞时我被卡住了。
我的翻译方法如下:
public float getOverlap(final Projection other) {
float start = m_min > other.m_min ? m_min : other.m_min;
float end = m_max < other.m_max ? m_max : other.m_max;
float translation = end - start;
return translation;
}
假设图片中两个矩形的投影看起来像这样。
R1.min = 2
R1.max = 8
R2.min = 5
R2.max = 11
当我检查 R1 与 R2 时,翻译将为 3 当我检查 R2 与 R1 时,翻译也将为 3
现在我将翻译添加到标准化轴
Normalized axis = Vector(1,0)
Translation Vector = Vector(1,0)*3 = Vector (3,0)
现在 R1 和 R2 都向右移动了 3 个点,但它们应该向不同的方向移动。R1 应该移动 Vector(-3,0),R2 应该移动 Vector(3,0)。
我如何计算正确的方向?