Android 2D 圆弧碰撞检测

4

我有一个使用Android 2D图形绘制的旋转弧。

c.drawArc(new RectF(50, 50, 250, 250), 30, 270, true, paint);

弧形将在游戏运行时旋转
我想知道如何检测其他游戏对象(矩形,圆形)是否与其碰撞?这是我第一次编写游戏 :)
我在http://hakim.se/experiments/html5/core/01/中看到类似的东西。
先谢谢了。
1个回答

7
Arc碰撞比普通碰撞稍微困难一些,但是使用布尔代数,您可以轻松检查给定点是否在弧线内。看看下面的图片。这里有3个对象。黑色球体可视化了您的弧线,如果某物与其碰撞,则可能在弧线内。红色球体位于黑色球体上方,可视化了弧线的“内部”,如果某物在红色球体内,则绝对不在弧线内。现在还有绿色三角形,它可视化了弧线的“截止”,任何在绿色三角形内的东西也绝对不在弧线内。
测试是否在黑色球体内很容易(物体到球心的距离 <= 球体半径)。红色球体同理。绿色三角形有点棘手,您首先必须构造它。找到弧的起始和结束弧度。通过开始弧度旋转一个单位向量。然后通过结束弧度旋转一个单位向量。将这两个向量都加长2倍黑色球体的半径。现在使用弧的中心点以及添加了中心位置的两个向量的位置作为三角形的3个点。然后您可以使用其中一个点-三角形碰撞求解器: http://www.bing.com/search?q=point+triangle+collision&go=&form=QBLH&scope=web 因此,请记住:与弧的碰撞=(与黑色球的碰撞)&&!(与红色球的碰撞)&&!(与绿色三角形的碰撞)。

ARC Collision


非常感谢,我会尝试在安卓上实现这个,并告诉您我的进展。 - ibmkhd
对于我的情况,我画了一个矩形而不是三角形,因为曲线恰好是半圆,这对我来说很好用。谢谢你的帮助。 - ibmkhd
这是一个Android问题,但在所有编程语言中概念都是相同的。这对我的JS Canvas有所帮助。+1 - call-me
好的,哇...非常优雅的解决方案,对于程序员来说编写也很直观。我想我会使用这个解决方案,而不是继续研究...相交两个圆,然后检查交点和弧角之间的重叠,尽管那也可以工作。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接