Javascript碰撞检测之间的圆和多边形
Javascript Collision Detection between circle and polygon?
我不确定如何去定义碰撞检测功能的区域,当我有一个多边形,看起来像:
______
/ _____|
/ /
/ /
---
在fill/stroke调用之前,我使用lineTo()绘制了几次多边形,因此我知道所有点的x,y坐标轴。
目前我只是检查球是否超出了特定区域的点:
if(tmpParticle.y <= platformBottom) {
if(tmpParticle.x < leftPipe_middleX || tmpParticle.x > rightPipe_middleX) {
tmpParticle = particleCollision(tmpParticle, platformBottom);
}
}
if(tmpParticle.y <= pipeBottom && tmpParticle.y >= pipeBottom - 30) {
if(tmpParticle.x < leftPipe_bottomRightX && tmpParticle.x > leftPipe_bottomLeftX) {
tmpParticle = particleCollision(tmpParticle, pipeBottom);
} else if (tmpParticle.x < rightPipe_bottomRightX && tmpParticle.x > rightPipe_bottomLeftX) {
tmpParticle = particleCollision(tmpParticle, pipeBottom);
}
}
platformHeight将是"顶部水平线"的Y值。platformBottom将是"platformHeight下方的水平线"的Y值。rightPipe*用于所示示例。leftPipe*适用于相同的多边形,除了在另一个方向(形成一个管道,你必须在不碰撞的情况下将球射过)。
我的particleCollision()函数只接受tmpParticle并根据Y值(第二个参数,即pipeBottom)反转方向。这工作得很好,虽然我可能需要改进它以后。
我只是需要想出一个更好的方法来定义碰撞的面积。
您可以考虑将管道分成三角形,然后找到triangle - circle
相交区域。如果它们相交,相交将总是一个convex polygon
(面积很容易通过再次分成三角形来计算)和一个segment
(面积也很容易计算- http://en.wikipedia.org/wiki/Circular_segment)。另一种情况是三角形本身,如果它完全位于圆内(也是一种简单的情况)。
相关文章:
- 逐像素碰撞检测弹球
- 砖块和球之间的碰撞检测(使用数字数组)
- 为什么我应该使用带有碰撞检测的四叉树
- 具有多个块的html5画布碰撞检测
- D3js地图标记碰撞检测
- javascript中两个正方形之间的碰撞检测
- 使用canvas+javascript进行2D碰撞检测
- 为什么我的碰撞检测在 Phaser 中不起作用
- 方向碰撞检测
- 圆圈碰撞检测 HTML5 画布
- FPS 游戏中的碰撞检测使用三个.js
- Javascript - 如何设置碰撞检测系统
- 三.js使用光线投射优化碰撞检测
- 对 2 个对象进行碰撞检测
- 如何将碰撞检测添加到我的 JavaScript 游戏中
- 使用边界球体进行碰撞检测
- 碰撞检测问题;对某些条件的奇怪反应
- JavaScript:碰撞检测不起作用
- JavaScript多边形碰撞检测
- Javascript碰撞检测之间的圆和多边形