2015-09-12 53 views
0

我有兩個箱子,無論大小的箱子是完全相同的大小和形狀。盒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 

回答

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 
相關問題