투영을 통한 체크
Box-Circle Collision Detection
Collision with a circle may be one of the simpler ones. Because its projection is the same in all directions (it's simply the circle's radius), we can just do the following:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | private function refresh(): void { //prepare the vectors var v:Vector2d; var current_box_corner:Point; var center_box:Point = box1.getDot( 0 ); var max: Number = Number .NEGATIVE_INFINITY; var box2circle:Vector2d = new Vector2d(c.x - center_box.x, c.y - center_box.y) var box2circle_normalised:Vector2d = box2circle.unitVector //get the maximum for ( var i: int = 1 ; i < 5 ; i++) { current_box_corner = box1.getDot(i) v = new Vector2d( current_box_corner.x - center_box.x , current_box_corner.y - center_box.y); var current_proj: Number = v.dotProduct(box2circle_normalised) if (max < current_proj) max = current_proj; } if (box2circle.magnitude - max - c.radius > 0 && box2circle.magnitude > 0 ) t.text = "No Collision" else t.text = "Collision" } |