碰撞检测算法
点和矩形碰撞
//java
/**
*
* @param x1 点
* @param y1 点
* @param x2 矩形view x
* @param y2 矩形view y
* @param w 矩形view 宽
* @param h 矩形view 高
* @return
*/
public static boolean isCollision(int x1, int y1, int x2, int y2, int w, int h) {
if (x1 >= x2 && x1 <= x2 + w && y1 >= y2 && y1 <= y2 + h) {
return true;
}
return false;
}
矩形碰撞
//java
public boolean isCollisionWithRect(int x1, int y1, int w1, int h1,
int x2, int y2, int w2, int h2) {
if (x1 >= x2 && x1 >= x2 + w2) {
return false;
} else if (x1 <= x2 && x1 + w1 <= x2) {
return false;
} else if (y1 >= y2 && y1 >= y2 + h2) {
return false;
} else if (y1 <= y2 && y1 + h1 <= y2) {
return false;
}
return true;
}
点和圆
// 点(x1,, x2), 圆心(x2, y2), 半径r
if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 -y2, 2)) <= r) {
// 如果点和圆心距离小于或者小于半径就认为发生碰撞
return true;
}
圆和圆
/**
* 圆形碰撞
*
* @param x1
* 圆形1的圆心X坐标
* @param y1
* 圆形2的圆心X坐标
* @param x2
* 圆形1的圆心Y坐标
* @param y2
* 圆形2的圆心Y坐标
* @param r1
* 圆形1的半径
* @param r2
* 圆形2的半径
* @return
*/
public boolean isCollisionWithCircle(int x1, int y1, int x2, int y2, int r1, int r2) {
// 直角坐标系,点1和点2做平行线, | x1 - x2 | 为横向直角边,|y1 - y2|为纵向直角边 根据勾股定理 c^2 = a^2 + b^2
if (Math.sqrt(Math.pow(x1 - x2, 2)) <= r1 + r2) {
return true;
}
return false;
}