将具有不同原点的两个相同大小的框对齐

时间:2015-09-12 02:36:35

标签: math geometry

我有两个盒子,两者的大小和形状完全相同。方框A的原点位于形状的正中心,而方框B的原点位于形状内的任意位置。我们还有每个框的最小和最大点(相对于原点),以便我们能够确定原点在框内的位置。目标是使用方框A的原点位置来偏移方框B的原点位置,以便两个方框的所有面对齐。

我确定这是一个简单的数学问题,但我无法弄明白如何使用方框B的最小和最大点来抵消方框B的原点,以便方框对齐。

boxA        = BoxShape()
boxA.min    = [-5, -7, -3]
boxA.max    = [ 5,  7,  3]
boxA.origin = [10, 78, 43]

boxB        = BoxShape()
boxB.min    = [-4, -4, -4]
boxB.max    = [ 6, 10,  2]
boxB.origin = boxA.origin + some_offset

1 个答案:

答案 0 :(得分:0)

经过一番探索,我终于找到了解决方案。我遇到的问题是我在我写的等式中使用了方框B的min而不是max。现在将其切换为最大值。

function get_offset(min, max, half)
    min  = math.abs(min)
    max  = math.abs(max)
    half = math.abs(half)

    if max > half then
        return half - max
    else
        return min - half
    end
end

function process(entity)
    min      = entity.scale * entity.min
    max      = entity.scale * entity.max
    size     = entity.shape:getSize()
    position = entity.rigidBody:getPosition()

    x = get_offset(min.x, max.x, size.x / 2)
    y = get_offset(min.y, max.y, size.y / 2)
    z = get_offset(min.z, max.z, size.z / 2)

    entity.position.x = position.x + x
    entity.position.y = position.y + y
    entity.position.z = position.z + z
end