s1 = {x, y, w, h}
을 입력하고 다른 rect을 s2 = {x, y, w, h}
및 벡터 v = {x, y}
으로 지정하십시오. s1
이 v
에 따라 이동했다고 가정하고, 중복되는지 확인하고 싶습니다.겹쳐진 사각형을 테스트하는 알고리즘이 잘못되었습니다. (?)
나는이 알고리즘이 있습니다
isOverlapping = not (s1.x + s1.w + v.x < s2.x
or s1.x + v.x > s2.x + s2.w
or s1.y + s1.h + v.y < s2.y
or s1.h + v.y > s2.y + s2.h)
를하지만 제대로 작동하지 않는 것,하지만 난 내가 전혀 이해하지 않기 때문에, 그것은 잘못이 무엇인지 말할 수 없습니다. 그리고 그것의 본성 때문에 나는 심지어 그것을 더 작은 조각들로 분해 할 수 없다. 그들은 즉시 S1 하나의 가장자리에 S2를 중복으로 중복되지되지 않는 것을 의미한다
isOverlapping = not (right_edge_of_s1_plus_move < left_edge_of_s2
or left_edge_of_s1_plus_move > right_edge_of_s2
or top_edge_of_s1_plus_move < bottom_edge_of_s2
or bottom_edge_of_s1_plus_move > top_edge_of_s2)
isOverlapping = not (s1_overlaps_s2_on_left_edge
or s1_overlaps_s2_on_right_edge
or s1_overlaps_s2_on_bottom_edge
or s1_overlaps_s2_on_top_edge)
... 뭐?
이상한 일은 내 프로그램에서 s1이 s2로 이동하려고 할 때만 작동하지 않는다는 것입니다. 다른 모든 것은 작동합니다.
내 질문은 : 두 이동 상자가 서로 겹치는 경우 (AABB) 및 여기에 어떤 종류의 알고리즘이 있는지 테스트하는 올바른 알고리즘은 무엇입니까? 나는 어딘가에서 그것을 얻었지만, 나는 더 이상 나의 근원을 찾을 수 없다는 것을 안다. 방금 추가 운동 벡터를 추가했습니다.
사용이 : http://gamedev.stackexchange.com/a/587 –
좋아이 잘 작동하지만 난 아직도 이유에 관심이 있어요 다른 알고리즘은 잘못되었습니다/내가 계산 한 하늘에서. 그것은 부분적으로 효과가 있었기 때문입니다. – hgiesel
btw, AABB가 크기를 변경하지 않으면 변위 벡터의 x/y가 사각형의 너비/높이보다 작은 지 확인해야합니다. 예 :'isOverlapping = abs (v.x)