【问题标题】:Understanding separating axis theorem and global / local coordinates了解分离轴定理和全局/局部坐标
【发布时间】: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


【解决方案1】:

您只是未能保持坐标系笔直。 (-20, -10) 结果是完全一致的,并且在您测试多边形的分离(沿该轴)时会给您正确的答案。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 2012-03-30
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多