首页 > 代码库 > 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
点和矩形碰撞
[java] view plaincopyprint?
- /**
- *
- * @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 plaincopyprint?
- /**
- * 检测两个矩形是否碰撞
- * @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 plaincopyprint?
- if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r) {
- // 如果点和圆心距离小于或等于半径则认为发生碰撞
- return true;
- }
圆和圆
[java] view plaincopyprint?
- /**
- * 圆形碰撞
- *
- * @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;
- }
碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。