碰撞检测--cavas

229 阅读1分钟

点和矩形碰撞

  1. /**
  2. *
  3. * @param x1 点
  4. * @param y1 点
  5. * @param x2 矩形view x
  6. * @param y2 矩形view y
  7. * @param w 矩形view 宽
  8. * @param h 矩形view 高
  9. * @return
  10. */
  11. public static boolean isCollsion(int x1, int y1, int x2, int y2, int w, int h) {
  12. if (x1 >= x2 && x1 <= x2 + w && y1 >= y2 && y1 <= y2 + h) {
  13. return true;
  14. }
  15. return false;
  16. }

矩形碰撞


  1. /**
  2. * 检测两个矩形是否碰撞
  3. * @return
  4. */
  5. public boolean isCollsionWithRect(int x1, int y1, int w1, int h1,
  6. int x2,int y2, int w2, int h2) {
  7. if (x1 >= x2 && x1 >= x2 + w2) {
  8. return false;
  9. } else if (x1 <= x2 && x1 + w1 <= x2) {
  10. return false;
  11. } else if (y1 >= y2 && y1 >= y2 + h2) {
  12. return false;
  13. } else if (y1 <= y2 && y1 + h1 <= y2) {
  14. return false;
  15. }
  16. return true;
  17. }

点和圆碰撞

点(x1,x2) , 圆心(x2,y2) ,半径r


  1. if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r) {
  2. // 如果点和圆心距离小于或等于半径则认为发生碰撞
  3. return true;
  4. }

圆和圆

  1. /**
  2. * 圆形碰撞
  3. *
  4. * @param x1
  5. * 圆形1的圆心X坐标
  6. * @param y1
  7. * 圆形2的圆心X坐标
  8. * @param x2
  9. * 圆形1的圆心Y坐标
  10. * @param y2
  11. * 圆形2的圆心Y坐标
  12. * @param r1
  13. * 圆形1的半径
  14. * @param r2
  15. * 圆形2的半径
  16. * @return
  17. */
  18. private boolean isCollisionWithCircle(int x1, int y1, int x2, int y2,
  19. int r1, int r2) {
  20. // Math.sqrt:开平方
  21. // Math.pow(double x, double y): X的Y次方
  22. //直角坐标系,依点1和点2做平行线,|x1-x2|为横向直角边,|y1-y2|为纵向直角边 依勾股定理 c^2=a^2+b^2
  23. if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r1 + r2) {
  24. // 如果两圆的圆心距小于或等于两圆半径和则认为发生碰撞
  25. return true;
  26. }
  27. return false;
  28. }