/*
* arcX,arcY表示圆的绘制坐标,就是左上角坐标 ,arcR为圆半径;rectX,rectY,rectW,rectH分别表示矩形的绘制坐标与宽高
*/
public static final boolean isArcRectCollides(int arcX, int arcY,
int arcR, int rectX, int rectY, int rectW, int rectH) {
int arcOx = arcX + arcR;// 圆心X坐标
int arcOy = arcY + arcR;// 圆心Y坐标
if (((rectX - arcOx) * (rectX - arcOx) + (rectY - arcOy)
* (rectY - arcOy)) <= arcR * arcR)
return true;
if (((rectX + rectW - arcOx) * (rectX + rectW - arcOx) + (rectY - arcOy)
* (rectY - arcOy)) <= arcR * arcR)
return true;
if (((rectX - arcOx) * (rectX - arcOx) + (rectY + rectH - arcOy)
* (rectY + rectH - arcOy)) <= arcR * arcR)
return true;
if (((rectX + rectW - arcOx) * (rectX + rectW - arcOx) + (rectY + rectH - arcOy)
* (rectY + rectH - arcOy)) <= arcR * arcR)
return true;
// 分别判断矩形4个顶点与圆心的距离是否<=圆半径;如果<=,说明碰撞成功
int minDisX = 0;
if (arcOy >= rectY && arcOy <= rectY + rectH) {
if (arcOx < rectX)
minDisX = rectX - arcOx;
else if (arcOx > rectX + rectW)
minDisX = arcOx - rectX - rectW;
else
return true;
if (minDisX <= arcR)
return true;
}// 判断当圆心的Y坐标进入矩形内时X的位置,如果X在(rectX-arcR)到(rectX+rectW+arcR)这个范围内,则碰撞成功
int minDisY = 0;
if (arcOx >= rectX && arcOx <= rectX + rectW) {
if (arcOy < rectY)
minDisY = rectY - arcOy;
else if (arcOy > rectY + rectH)
minDisY = arcOy - rectY - rectH;
else
return true;
if (minDisY <= arcR)
return true;
}// 判断当圆心的X坐标进入矩形内时Y的位置,如果X在(rectY-arcR)到(rectY+rectH+arcR)这个范围内,则碰撞成功
return false;
}
* arcX,arcY表示圆的绘制坐标,就是左上角坐标 ,arcR为圆半径;rectX,rectY,rectW,rectH分别表示矩形的绘制坐标与宽高
*/
public static final boolean isArcRectCollides(int arcX, int arcY,
int arcR, int rectX, int rectY, int rectW, int rectH) {
int arcOx = arcX + arcR;// 圆心X坐标
int arcOy = arcY + arcR;// 圆心Y坐标
if (((rectX - arcOx) * (rectX - arcOx) + (rectY - arcOy)
* (rectY - arcOy)) <= arcR * arcR)
return true;
if (((rectX + rectW - arcOx) * (rectX + rectW - arcOx) + (rectY - arcOy)
* (rectY - arcOy)) <= arcR * arcR)
return true;
if (((rectX - arcOx) * (rectX - arcOx) + (rectY + rectH - arcOy)
* (rectY + rectH - arcOy)) <= arcR * arcR)
return true;
if (((rectX + rectW - arcOx) * (rectX + rectW - arcOx) + (rectY + rectH - arcOy)
* (rectY + rectH - arcOy)) <= arcR * arcR)
return true;
// 分别判断矩形4个顶点与圆心的距离是否<=圆半径;如果<=,说明碰撞成功
int minDisX = 0;
if (arcOy >= rectY && arcOy <= rectY + rectH) {
if (arcOx < rectX)
minDisX = rectX - arcOx;
else if (arcOx > rectX + rectW)
minDisX = arcOx - rectX - rectW;
else
return true;
if (minDisX <= arcR)
return true;
}// 判断当圆心的Y坐标进入矩形内时X的位置,如果X在(rectX-arcR)到(rectX+rectW+arcR)这个范围内,则碰撞成功
int minDisY = 0;
if (arcOx >= rectX && arcOx <= rectX + rectW) {
if (arcOy < rectY)
minDisY = rectY - arcOy;
else if (arcOy > rectY + rectH)
minDisY = arcOy - rectY - rectH;
else
return true;
if (minDisY <= arcR)
return true;
}// 判断当圆心的X坐标进入矩形内时Y的位置,如果X在(rectY-arcR)到(rectY+rectH+arcR)这个范围内,则碰撞成功
return false;
}