标签: collision-detection

如何确定2D点是否在多边形内?

我正在尝试在多边形算法中创建一个快速 2D点,用于命中测试(例如Polygon.contains(p:Point)).对于有效技术的建议将不胜感激.

graphics performance polygon collision-detection point-in-polygon

473
推荐指数
15
解决办法
26万
查看次数

球与球的碰撞 - 检测和处理

在Stack Overflow社区的帮助下,我写了一个非常基本但有趣的物理模拟器.

替代文字

单击并拖动鼠标以启动球.它会反弹并最终停在"地板"上.

我想要添加的下一个重要特征是球与球的碰撞.球的运动被分解为ax和y速度矢量.我有重力(每一步的y矢量小减少),我有摩擦(每次与墙碰撞的两个矢量的小减少).球真诚地以令人惊讶的逼真方式移动.

我想我的问题有两个部分:

  1. 检测球与球碰撞的最佳方法是什么?
    我是否只有一个O(n ^ 2)循环遍历每个球并检查每个其他球以查看它的半径是否重叠?
  2. 我用什么方程来处理球与球的碰撞?物理101
    它如何影响两个球的速度x/y向量?两个球进入的最终方向是什么?我如何将其应用于每个球?

替代文字

处理"墙壁"的碰撞检测和由此产生的矢量变化很容易,但我发现球 - 球碰撞的并发症更多.对于墙壁,我只需要采取适当的x或y向量的负数,然后关闭它将朝正确的方向前进.有球我认为不是这样.

一些快速澄清:为了简单起见,我现在可以完全弹性碰撞,现在我的所有球都具有相同的质量,但我将来可能会改变它.


编辑:我发现有用的资源

带矢量的2d球物理:无三角碰撞的二维碰撞.pdf
2d球碰撞检测示例:添加碰撞检测


成功!

我的球碰撞检测和响应工作很棒!

相关代码:

碰撞检测:

for (int i = 0; i < ballCount; i++)  
{  
    for (int j = i + 1; j < ballCount; j++)  
    {  
        if (balls[i].colliding(balls[j]))  
        {
            balls[i].resolveCollision(balls[j]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将检查每个球之间的碰撞但跳过多余的检查(如果你必须检查球1是否与球2碰撞,那么你不需要检查球2是否与球1碰撞.此外,它会跳过检查是否与自身发生碰撞).

然后,在我的球类中,我有我的colliding()和resolveCollision()方法:

public boolean colliding(Ball ball)
{
    float xd = position.getX() - ball.position.getX();
    float yd = position.getY() - ball.position.getY();

    float sumRadius = getRadius() + ball.getRadius();
    float sqrRadius …
Run Code Online (Sandbox Code Playgroud)

language-agnostic graphics physics collision-detection

262
推荐指数
7
解决办法
18万
查看次数

圆线段碰撞检测算法?

我有一条从A到B的线和一条位于C的圆,半径为R.

图片

用于检查线是否与圆相交的好算法是什么?它沿圆圈边缘的坐标发生了什么?

algorithm math geometry collision-detection line

191
推荐指数
8
解决办法
14万
查看次数

圆 - 矩形碰撞检测(交叉)

如何判断圆形和矩形在2D欧几里德空间中是否相交?(即经典2D几何)

geometry collision-detection

181
推荐指数
6
解决办法
19万
查看次数

IOS:验证一个点是否在矩形内

有没有办法验证a CGPoint是否在特定内部CGRect.例如:我正在拖动一个UIImageView,我想验证它的中心点CGPoint是否在另一个内部UIImageView我该怎么办?

collision-detection uiview cgpoint ios cgrect

138
推荐指数
5
解决办法
10万
查看次数

HashTables如何处理碰撞?

我在学位课程中听说,HashTable如果新的Key条目与另一个条目相撞,它会在"下一个可用"桶中放入一个新条目.

HashTable如果在使用碰撞密钥调用一个碰撞时发生这种碰撞,仍将如何返回正确的值?

我假设KeysString类型,hashCode()返回默认由Java生成.

如果我实现自己的散列函数并将其用作查找表(即a HashMapDictionary)的一部分,那么处理冲突的策略是什么?

我甚至看过有关素数的注释!Google搜索中的信息不太明确.

java hashtable collision-detection

85
推荐指数
6
解决办法
12万
查看次数

jQuery/JavaScript碰撞检测

如何检测两个<div>元素是否发生碰撞?

两个div是相互垂直的简单彩色盒子,因此没有复杂的形状或角度.

html javascript jquery collision-detection

75
推荐指数
5
解决办法
7万
查看次数

3D碰撞/物体检测如何工作?

我总是想知道这一点.在像GTA这样的游戏中,有数以万计的物体,一旦你在健康包上,游戏怎么知道呢?

每个对象都不可能有一个事件监听器?迭代也不好?我只是想知道它是如何实际完成的.

algorithm 3d collision-detection data-structures

54
推荐指数
2
解决办法
3万
查看次数

巨大圈子的碰撞检测

检查大量圈子碰撞的最佳方法是什么?
检测两个圆之间的碰撞非常容易,但是如果我们检查每个组合,则它是O(n 2),这绝对不是最佳解决方案.

我们可以假设circle对象具有以下属性:

  • 坐标
  • 半径
  • 速度
  • 方向

速度是恒定的,但方向可以改变.

我想出了两个解决方案,但也许有更好的解决方案.

解决方案1将
整个空间划分为重叠的正方形,并仅检查与同一正方形的圆形的碰撞.正方形需要重叠,因此当圆从一个方格移动到另一个方格时不会出现问题.

解决方案2
在开始时,需要计算每对圆之间的距离.
如果距离很小,那么这些对存储在一些列表中,我们需要检查每次更新中的冲突.
如果距离很大,那么我们存储后更新可能会发生碰撞(可以计算,因为我们知道距离和速度).它需要存储在某种优先级队列中.在先前计算的更新数量之后,需要再次检查距离,然后我们执行相同的过程 - 将其放在列表中或再次放入优先级队列中.

Mark Byers的答案问题

  1. 是游戏吗?
    这是为了模拟,但也可以作为游戏来对待
  2. 您想要每n毫秒重新计算一次新位置,还要检查此时的碰撞情况吗?
    是的,更新之间的时间是不变的.
  3. 您想找到发生第一次/每次碰撞的时间吗?
    不,我想找到每一次碰撞,并在碰撞时做"有所作为".
  4. 准确性有多重要?
    这取决于你的准确度是什么意思.我需要检测所有碰撞.
  5. 如果非常小的快速移动的圆圈偶尔会相互穿过,这是一个大问题吗?
    可以假设速度太小而不会发生.

algorithm geometry collision-detection

52
推荐指数
3
解决办法
8684
查看次数

在Sprite Kit中执行碰撞的物理计算

我正在尝试使用Sprite Kit设置一些弹性碰撞.正如我在Sprite Kit Physics Collision Issue中提到的那样,多个物体彼此靠近的情况存在问题

我对碰撞情况的时机感到困惑.

我试着设置dynamicNO-didBeginContact:委托方法,计算最终速度,然后在-didEndContact:设定的dynamicYES,然后正确设置速度.

我希望它在碰撞之外是动态的原因是因为我想要摩擦/重力等.订单/逻辑有什么问题?我看了一下-didSimulatePhysics方法,但它似乎不是要走的路.

collision-detection ios sprite-kit skphysicsbody

46
推荐指数
2
解决办法
1481
查看次数