zoukankan      html  css  js  c++  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;  
        }  

    矩形碰撞

    /** 
         * 检测两个矩形是否碰撞 
         * @return 
         */  
        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 
         */  
        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;  
        }  
  • 相关阅读:
    centos环境无法安装paramiko的问题解决
    openstack swift节点安装手册3-最后的安装配置及验证
    P4329 [COCI2006-2007#1] Bond
    P4802 [CCO 2015]路短最
    树链剖分(从入门到入土。)
    分块详解
    Cocos2d-x 详解坐标系统
    pureMVC介绍及学习
    pureMVC简单示例及其原理讲解五(Facade)
    pureMVC简单示例及其原理讲解四(Controller层)
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/5949879.html
Copyright © 2011-2022 走看看