Separating Axis Theorem and Python

前端 未结 2 1654
青春惊慌失措
青春惊慌失措 2021-01-06 11:17

This is what I am currently doing:

Creating 4 axis that are perpendicular to 4 edges of 2 rectangles. Since they are rectangles I do not need to generate an axis (no

2条回答
  •  既然无缘
    2021-01-06 11:55

    I see two things wrong. First, the projection should simply be the dot product of a vertex with the axis. What you're doing is way too complicated. Second, the way you get your axis is incorrect. You write:

    Axis1 = [  -(A_TR[0] - A_TL[0]),
                 A_TR[1] - A_TL[1] ]
    

    Where it should read:

    Axis1 = [  -(A_TR[1] - A_TL[1]),
                 A_TR[0] - A_TL[0] ]
    

    The difference is coordinates does give you a vector, but to get the perpendicular you need to exchange the x and y values and negate one of them.

    Hope that helps.

    EDIT Found another bug

    In this code:

    if not ( B_Scalars[0] <= A_Scalars[3] or B_Scalars[3] >= A_Scalars[0] ):
                #no overlap so no collision
                return 0
    

    That should read:

    if not ( B_Scalars[3] <= A_Scalars[0] or A_Scalars[3] <= B_Scalars[0] ):
    

    Sort gives you a list increasing in value. So [1,2,3,4] and [10,11,12,13] do not overlap because the minimum of the later is greater than the maximum of the former. The second comparison is for when the input sets are swapped.

提交回复
热议问题