点、圆、矩形之间的简单碰撞检测
2015-03-27 20:57
405 查看
这里总结了一下点、圆、矩形之间的简单碰撞检测算法
(ps:矩形不包括旋转状态)
点和圆的碰撞检测:
1.计算点和圆心的距离
2.判断点与圆心的距离是否小于圆的半
点和矩形的碰撞检测:
1.获得矩形的左上角坐标p1和右下角坐标p2
2.判断点p的x坐标是否大于p1的x坐标,并且小于p2的x坐标,并且p的y坐标大于p2的y坐标,并且小于p2
圆和圆的碰撞检测:
1.计算两圆心之间的距离
2.判断两圆心之间的距离是否小于两圆的半径之和
矩形和矩形的碰撞检测:
在水平方向上,判断两个矩形中点x坐标的距离是否小于两个矩形宽度一半之和
在垂直方向上,判断两个矩形中点y坐标的距离是否小于两个矩形高度一半之和
圆和矩形的碰撞检测:
源码下载:点击打开链接
(ps:矩形不包括旋转状态)
点和圆的碰撞检测:
1.计算点和圆心的距离
2.判断点与圆心的距离是否小于圆的半
isCollision: function(point, circle) { //点与圆心的距离 var distance = Math.sqrt(Math.pow(point.x - circle.x, 2) + Math.pow(point.y - circle.y, 2)); //圆的半径 var radius = circle.getContentSize().width / 2; //如果点与圆心距离小于圆的半径,返回true if(radius > distance) { return true; } else { return false; } }
点和矩形的碰撞检测:
1.获得矩形的左上角坐标p1和右下角坐标p2
2.判断点p的x坐标是否大于p1的x坐标,并且小于p2的x坐标,并且p的y坐标大于p2的y坐标,并且小于p2
isCollision: function(point, rect) { //获得矩形的左上角坐标p1和右下角坐标p2 var p1 = cc.p(rect.x - rect.width/2, rect.y + rect.height/2); var p2 = cc.p(rect.x + rect.width/2, rect.y - rect.height/2); //判断点p的x坐标是否大于p1的x坐标,并且小于p2的x坐标,并且p的y坐标大于p2的y坐标,并且小于p2的y坐标 if(point.x > p1.x && point.x < p2.x && point.y > p2.y && point.y < p1.y) { return true; } else { return false; } }
圆和圆的碰撞检测:
1.计算两圆心之间的距离
2.判断两圆心之间的距离是否小于两圆的半径之和
isCollision: function(circle1, circle2) { //圆心与圆心的距离 var distance = Math.sqrt(Math.pow(circle1.x - circle2.x, 2) + Math.pow(circle1.y - circle2.y, 2)); //圆心半径 var r1 = circle1.getContentSize().width / 2; var r2 = circle2.getContentSize().width / 2; //如果圆心与圆心距离小于两圆的半径,返回true if(r1 + r2 > distance) { return true; } else { return false; } }
矩形和矩形的碰撞检测:
在水平方向上,判断两个矩形中点x坐标的距离是否小于两个矩形宽度一半之和
在垂直方向上,判断两个矩形中点y坐标的距离是否小于两个矩形高度一半之和
isCollision: function(rect1, rect2) { //获取矩形1的宽高 var width1 = rect1.width; var height1 = rect1.height; //获取矩形2的宽高 var width2 = rect2.width; var height2 = rect2.height; var flag; if(rect1.x >= rect2.x && rect2.x <= rect1.x - width1/2 - width2/2) { flag = false; } else if(rect1.x <= rect2.x && rect2.x >= rect1.x + width1/2 + width2/2) { flag = false; } else if(rect1.y >= rect2.y && rect2.y <= rect1.y - height1/2 - height2/2) { flag = false; } else if(rect1.y <= rect2.y && rect2.y >= rect1.y + height1/2 + height2/2) { flag = false; } else { flag = true; } }
圆和矩形的碰撞检测:
isCollision: function(circle, rect) { //圆的半径 var radius = circle.width / 2; //圆形中心与矩形中心的相对坐标 var x = circle.x - rect.x; var y = circle.y - rect.y; var minX = Math.min(x, rect.width/2); var maxX = Math.max(minX, -rect.width/2); var minY = Math.min(y, rect.height/2); var maxY = Math.max(minY, -rect.height/2); if((maxX - x) * (maxX - x) + (maxY - y) * (maxY - y) <= radius * radius) { return true; } else { return false; } }
源码下载:点击打开链接
相关文章推荐
- 从零开始做一个基于pygame引擎的躲闪小游戏(一)-画矩形、画圆、简单的碰撞检测
- 圆与矩形简单碰撞检测
- 简单检测物体碰撞
- Flash游戏学习笔记:矩形检测碰撞
- HTML5 Canvas 碰撞检测的简单实现
- 简单碰撞检测方法
- Flash游戏学习笔记:矩形检测碰撞
- XNA系列教程 2D 碰撞教程 1: 矩形检测
- 使用C++与SFML编写一个简单的撞球游戏Part7——弹球的碰撞检测
- 游戏中检测摄像机与人之间有无带碰撞器的遮挡物
- android 3D 游戏实现之简单碰撞检测
- Box2d 学习笔记 2个物体堆叠拖动及简单碰撞检测
- 矩形检测碰撞算法
- 如何用cocos2d-x来开发简单的Uphone游戏:(三) 射击子弹 & 碰撞检测
- android+unity3D游戏开发之简单的碰撞检测
- Flash游戏学习笔记:矩形检测碰撞
- 椭球体和顶点之间的碰撞检测。
- Paparvision 简单的鼠标点击 与 粒子的碰撞检测
- 2个矩形碰撞检测
- 圆,矩形碰撞检测