objective-c/core图形中的碰撞检测功能

objective-c/core图形中的碰撞检测功能,objective-c,Objective C,是否有一个内置的功能来检测之间的碰撞 两圈 我使用了CGRectIntersectsRect(rect1,rect2) 求两个矩形之间的交点。但是如果我想知道它们在哪个轴上相交,我怎么才能找到呢 有内置函数吗?或者你有其他想法吗?如果它们是圆,测试就很简单。只需将它们中心之间的距离与半径之和进行比较。如果它们是圆,碰撞点(如果存在)将位于连接它们中心的线上,每个碰撞点的冲量将沿从该点到圆中心的方向作用 假设中心(x1,y1)和(x2,y2)和半径r1和r2,则当 (x1 - x2) * (x1

是否有一个内置的功能来检测之间的碰撞 两圈

我使用了
CGRectIntersectsRect(rect1,rect2)
求两个矩形之间的交点。但是如果我想知道它们在哪个轴上相交,我怎么才能找到呢


有内置函数吗?或者你有其他想法吗?

如果它们是圆,测试就很简单。只需将它们中心之间的距离与半径之和进行比较。

如果它们是圆,碰撞点(如果存在)将位于连接它们中心的线上,每个碰撞点的冲量将沿从该点到圆中心的方向作用

假设中心
(x1,y1)
(x2,y2)
和半径
r1
r2
,则当

(x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) = (r1 + r2) * (r1 + r2)
这只是你的基本要求

在大多数情况下——无疑包括您的情况——碰撞检测是一项近似业务,而不是分析业务。这就是说,你移动你的物体的小步骤和测试重叠,而不是解决运动方程的确切时刻的接触。因此,不必寻找上述情况,您将使用如下不等式:

(x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) <= (r1 + r2) * (r1 + r2)
也就是说,在中心之间的直线上,距离与半径成比例。如果重叠很小,这应该非常接近真实的碰撞点。如果它很大,你就有麻烦了

忽略任何旋转,每个圆形对象将经历从该碰撞点到其自身中心的推力。例如,推送对象1将沿
(x1-xp,y1-yp)
方向运行

要计算出效果是什么——也就是说,物体在运动之后是如何运动的——你需要考虑每个物体的质量,并应用动量守恒定律。请仔细阅读,如果您想模拟非完全弹性的碰撞,可以使用


在特殊情况下,物体大小和质量相同,碰撞是完全弹性的——这在现实生活中很少发生,但在游戏中更为常见——你可以将每个物体的速度分解为平行于和垂直于中心线的分量,然后在两个物体之间交换平行组件。

我知道,但我需要知道如何在碰撞后引导球的运动。这是一个数学问题,不是Objective-C问题。翻开你的旧数学教科书,看看如何在二维空间中加减向量。如果你对数学不太熟悉,看看这本好书:好答案!我唯一不清楚的是代理联系人。
xp = x1 + (x2 - x1) * r1 / (r1 + r2)
yp = y1 + (y2 - y1) * r1 / (r1 + r2)