我正在尝试在多边形算法中创建一个快速 2D点,用于命中测试(例如Polygon.contains(p:Point)).对于有效技术的建议将不胜感激.
graphics performance polygon collision-detection point-in-polygon
在Stack Overflow社区的帮助下,我写了一个非常基本但有趣的物理模拟器.

单击并拖动鼠标以启动球.它会反弹并最终停在"地板"上.
我想要添加的下一个重要特征是球与球的碰撞.球的运动被分解为ax和y速度矢量.我有重力(每一步的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) 我有一条从A到B的线和一条位于C的圆,半径为R.

用于检查线是否与圆相交的好算法是什么?它沿圆圈边缘的坐标发生了什么?
有没有办法验证a CGPoint是否在特定内部CGRect.例如:我正在拖动一个UIImageView,我想验证它的中心点CGPoint是否在另一个内部UIImageView我该怎么办?
我在学位课程中听说,HashTable如果新的Key条目与另一个条目相撞,它会在"下一个可用"桶中放入一个新条目.
HashTable如果在使用碰撞密钥调用一个碰撞时发生这种碰撞,仍将如何返回正确的值?
我假设Keys是String类型,hashCode()返回默认由Java生成.
如果我实现自己的散列函数并将其用作查找表(即a HashMap或Dictionary)的一部分,那么处理冲突的策略是什么?
我甚至看过有关素数的注释!Google搜索中的信息不太明确.
如何检测两个<div>元素是否发生碰撞?
两个div是相互垂直的简单彩色盒子,因此没有复杂的形状或角度.
我总是想知道这一点.在像GTA这样的游戏中,有数以万计的物体,一旦你在健康包上,游戏怎么知道呢?
每个对象都不可能有一个事件监听器?迭代也不好?我只是想知道它是如何实际完成的.
检查大量圈子碰撞的最佳方法是什么?
检测两个圆之间的碰撞非常容易,但是如果我们检查每个组合,则它是O(n 2),这绝对不是最佳解决方案.
我们可以假设circle对象具有以下属性:
速度是恒定的,但方向可以改变.
我想出了两个解决方案,但也许有更好的解决方案.
解决方案1将
整个空间划分为重叠的正方形,并仅检查与同一正方形的圆形的碰撞.正方形需要重叠,因此当圆从一个方格移动到另一个方格时不会出现问题.
解决方案2
在开始时,需要计算每对圆之间的距离.
如果距离很小,那么这些对存储在一些列表中,我们需要检查每次更新中的冲突.
如果距离很大,那么我们存储后更新可能会发生碰撞(可以计算,因为我们知道距离和速度).它需要存储在某种优先级队列中.在先前计算的更新数量之后,需要再次检查距离,然后我们执行相同的过程 - 将其放在列表中或再次放入优先级队列中.
Mark Byers的答案问题
我正在尝试使用Sprite Kit设置一些弹性碰撞.正如我在Sprite Kit Physics Collision Issue中提到的那样,多个物体彼此靠近的情况存在问题
我对碰撞情况的时机感到困惑.
我试着设置dynamic到NO在-didBeginContact:委托方法,计算最终速度,然后在-didEndContact:设定的dynamic到YES,然后正确设置速度.
我希望它在碰撞之外是动态的原因是因为我想要摩擦/重力等.订单/逻辑有什么问题?我看了一下-didSimulatePhysics方法,但它似乎不是要走的路.