javascript函数判断圆与矩形是否碰撞
程序员文章站
2022-03-13 13:41:23
...
代入初始坐标,返回碰撞结果
//计算两点间距离函数 (下面将用到)
function distance_between_two_points_square(a,b,x,y){
distance=(x-a)*(x-a)+(y-b)*(y-b);
return distance;
}
//判断圆与矩形是否碰撞函数,代入值 圆的x坐标,圆的y坐标, 圆半径, 矩形左上顶点x坐标,矩形左上顶点y坐标,矩形宽度, 矩形高度
function circle_and_rect_collision(circle_x,circle_y,circle_r,rect_x,rect_y,width,height){
if(circle_x>rect_x-circle_r && circle_x<rect_x+width+circle_r && circle_y>rect_y-circle_r && circle_y<rect_y+height+circle_r){
if(circle_x>rect_x&&circle_x<rect_x+width&&circle_y>rect_y&&circle_y<rect_y+height){
return 'inside';//圆心在矩形内
}
else if(circle_x>=rect_x&&circle_x<=rect_x+width){
if(circle_y<=rect_y){
return 'up';//碰撞且圆心在矩形正上方
}
else{
return 'down';//碰撞且圆心在矩形正下方
}
}
else if(circle_y>=rect_y&&circle_y<=rect_y+height){
if(circle_x<=rect_x){
return 'left';//碰撞且圆心在矩形正左方
}
else{
return 'right';//碰撞且圆心在矩形正右方
}
}
else{
if(circle_x<rect_x){
if(circle_y<rect_y){
if(distance_between_two_points_square(circle_x,circle_y,rect_x,rect_y)<circle_r*circle_r){
return 'left_up_corner';//碰撞且圆心在矩形左上角
}
else{
return false;//未碰撞
}
}
else{
if(distance_between_two_points_square(circle_x,circle_y,rect_x,rect_y+height)<circle_r*circle_r){
return 'left_down_corner';//碰撞且圆心在矩形左下角
}
else{
return false;//未碰撞
}
}
}
else {
if(circle_y<rect_y){
if(distance_between_two_points_square(circle_x,circle_y,rect_x+width,rect_y)<circle_r*circle_r){
return 'right_up_corner';//碰撞且圆心在矩形右上角
}
else{
return false;//未碰撞
}
}
else{
if(distance_between_two_points_square(circle_x,circle_y,rect_x+width,rect_y+height)<circle_r*circle_r){
return 'right_down_corner';//碰撞且圆心在矩形右下角
}
else{
return false;//未碰撞
}
}
}
}
}
else{
return false;//未碰撞
}
}