您的位置:首页 > 其它

碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞

2015-01-20 10:04 183 查看
点和矩形碰撞

[java] view
plaincopy





/**

*

* @param x1 点

* @param y1 点

* @param x2 矩形view x

* @param y2 矩形view y

* @param w 矩形view 宽

* @param h 矩形view 高

* @return

*/

public static boolean isCollsion(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] view
plaincopy





/**

* 检测两个矩形是否碰撞

* @return

*/

public boolean isCollsionWithRect(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

[java] view
plaincopy





if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r) {

// 如果点和圆心距离小于或等于半径则认为发生碰撞

return true;

}

圆和圆

[java] view
plaincopy





/**

* 圆形碰撞

*

* @param x1

* 圆形1的圆心X坐标

* @param y1

* 圆形2的圆心X坐标

* @param x2

* 圆形1的圆心Y坐标

* @param y2

* 圆形2的圆心Y坐标

* @param r1

* 圆形1的半径

* @param r2

* 圆形2的半径

* @return

*/

private boolean isCollisionWithCircle(int x1, int y1, int x2, int y2,

int r1, int r2) {

// Math.sqrt:开平方

// Math.pow(double x, double y): X的Y次方

//直角坐标系,依点1和点2做平行线,|x1-x2|为横向直角边,|y1-y2|为纵向直角边 依勾股定理 c^2=a^2+b^2

if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r1 + r2) {

// 如果两圆的圆心距小于或等于两圆半径和则认为发生碰撞

return true;

}

return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: