-
Collision Detection Using the Separating Axis Theorem공부/Physics for Game Developers 2023. 11. 10. 16:30
https://code.tutsplus.com/collision-detection-using-the-separating-axis-theorem--gamedev-169t
- 분리 축 정리를 이용한 충돌 감지
SAT는 기본적으로 두 개의 다격형을 분리하기 위해 선을 그릴 수 있으면, 충돌하지 않는다는 것을 의미한다.
- 기본적인 두 도형 사이의 충돌을 확인하는 방법
//Pseudo code to evaluate the separation of box1 and box2 var length:Number = box2.x - box1.x; var half_width_box1:Number = box1.width*0.5; var half_width_box2:Number = box2.width*0.5; var gap_between_boxes:Number = length - half_width_box1 - half_width_box2; if(gap_between_boxes > 0) trace("It's a big gap between boxes") else if(gap_between_boxes == 0) trace("Boxes are touching each other") else if(gap_between_boxes < 0) trace("Boxes are penetrating each other")
- 박스가 기울어진 경우
var dot10:Point = box1.getDot(0); var dot11:Point = box1.getDot(1); var dot20:Point = box2.getDot(0); var dot24:Point = box2.getDot(4); //Actual calculations var axis:Vector2d = new Vector2d(1, -1).unitVector; var C:Vector2d = new Vector2d( dot20.x - dot10.x, dot20.y - dot10.y ) var A:Vector2d = new Vector2d( dot11.x - dot10.x, dot11.y - dot10.y ) var B:Vector2d = new Vector2d( dot24.x - dot20.x, dot24.y - dot20.y ) var projC:Number = C.dotProduct(axis) var projA:Number = A.dotProduct(axis); var projB:Number = B.dotProduct(axis); var gap:Number = projC - projA + projB; //projB is expected to be a negative value if (gap > 0) t.text = "There's a gap between both boxes" else if (gap > 0) t.text = "Boxes are touching each other" else t.text = "Penetration had happened."
'공부 > Physics for Game Developers' 카테고리의 다른 글
물리 엔진 구현 시 참고 내용 (0) 2023.12.05 파티클 동역학 (3) 2023.12.03 무게 중심 (0) 2023.11.28 Vector Class (0) 2023.11.26