【发布时间】:2011-04-07 22:49:10
【问题描述】:
在使用分离轴定理将矩形投影到不同轴上时,我在局部坐标和全局坐标之间转换时遇到问题:http://en.wikipedia.org/wiki/Separating_axis_theorem。最后,我想检查一下是否与另一个物体发生碰撞。
假设我有一个矩形,其顶点的全局坐标为:
(10,20),(10,10),(20,10),(20,20)
因此本地坐标为:
(-5,5),(-5,-5),(5,-5),(5,5)
这将使 4 个法线如下:(每个轴 1 个)
(1,0),(0,1),(-1,0),(0,-1)
的最小/最大点积将是:
(1,0) . (-5,5) = -5
(1,0) . (-5,-5) = -5
(1,0) . (5,-5) = 5
(1,0) . (5,5) = 5
所以这个法线的最小/最大对是 (-5,5),由于对称性,在这种情况下所有其他的都是 (-5,5)。
当我想将坐标转换回全局坐标时,问题就来了。据我了解,我需要通过将给定轴投影到其全局位置来移动最小/最大对。
这在使用正单位向量时效果很好:
unit center of rect
(1,0) . (15, 15) = 15
这意味着调整后的最小值/最大值将为 15-5,15+5 = 10,20,这是正确的
但是,当我对负单位向量执行此操作时,我得到:
(-1,0) . (15, 15) = -15, meaning that the min,max values are now (-20,-10)
我不认为这是正确的?算法应该是这样工作的吗?
注意:我正在尝试使代码适用于所有凸多边形,因此我不能简单地忽略此矩形的负单位向量。
【问题讨论】:
-
注:维基百科中的文章很不精确,定理的陈述是错误的。在 R^2 中取 C1 = { (x,y), y 0 和 y >= 1/x }。 C1 和 C2 没有分隔线,它们是不相交的,并且都是凸的。为了使定理(在文献中称为 Hahn-Banach 定理)为真,要么 C1 和 C2 必须是开的,要么 C1 和 C2 必须是闭的并且至少一个必须是紧的。
标签: math