2

我正在使用 sphero Android SDK。

考虑一个突破克隆(如 Arkanoid)以及 2D 游戏中的球如何从屏幕的横向边缘以及屏幕顶部反弹。我相信它反弹的方式使用基本的“反射”,并且一切都是无摩擦的,没有旋转力或重力等。球的速度只受球如何撞击桨叶的影响,也许还有一些特殊的砖块可以加速它了。假设我们在现实世界中设置了类似的东西,我们有一个相当狭窄的走廊,而且墙壁可能只有 1 米的距离。让我们扔掉砖块和桨,只剩下 2 个墙壁和 1 个球(当然,球是 Sphero)考虑链接到图像。具有真实物理墙的 Sphero 2D 碰撞仿真

假设我通过滑动或操纵杆操作将球从某个方向开始,或者甚至只是以某种速度以编程方式将其发送到所述方向,以便它在击中第一面墙时具有一定的速度(x,y),是有某种方法可以使用 CollisionDetectedAsyncData 中包含的数据来确定撞击时的速度,以及墙壁与穿过球中心的线和球的撞击点之间的角度,这样我就可以让球像在 2D 突破克隆中那样“弹跳”,如图所示?如果我能弄清楚撞击时的速度和角度,那么我应该能够做到。“反弹”后的球速度将与撞击墙壁之前的速度相同。

我有一个项目设置,我正在监听冲突,并且我还获得了流式定位数据。所以我有 LocatorData 和 CollisionDetectedAsyncData 可供我使用。当根据我设置的阈值检测到碰撞时,我会记录 CollisionDetectedAsyncData 实例,然后尝试根据它进行一些计算。问题是,当谈到 CollisionDetectedAsyncData 到底是什么时,我仍然不明白。我不明白 powerX 和 powerY 是什么。医生说是量级,但量级是什么?请原谅我在这里的无知。如你所知,我在物理系很弱。无论如何,当当前加速度矢量和之前的加速度矢量之差超过 15000 时,我也会记录 LocatorData。这里'

(CollisionDetectedAsyncData)

01-20 22:35:58.559: WARN/CollisionCalculator(15101): Begin calculateReactionHeading
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Calculating Reaction Heading with Algorithm 3
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Angle relative to [X:13.970461890040886, Y:76.02953810995912]
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Result Angle: 76.02953810995912
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Impact Heading: 0.0
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Power X: 205
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Power Y: 51
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Acceleration X: -0.562255859375
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Acceleration Y: -2.44140625E-4
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Calculated Heading: 283.9704618900409
01-20 22:35:58.559: WARN/CollisionCalculator(15101): Calculated Heading Mod Abs 360: 283.9704618900409
01-20 22:35:58.559: WARN/CollisionCalculator(15101): End calculateReactionHeading

(定位数据)

01-20 22:35:58.679: WARN/CollisionCalculator(15101): Significant acceleration magnitude found! Magnitude: 48047.68312045681
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Previous Vectors [Velocity: x=5.300000190734863, y=-1.2000000476837158], [Acceleration: x=-399.99961853027344, y=99.99990463256836]
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Current Vectors [Velocity: x=27.899999618530273, y=92.19999694824219], [Acceleration: x=11299.999713897705, y=46699.99849796295]
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Angle theta=3.2335627660548973
01-20 22:35:58.679: WARN/CollisionCalculator(15101): Angle of current Velocity vector relative to [X=73.16402521005779, Y=16.835974789942213]

好的,我知道这个问题有很多信息,但我觉得这是一个足够复杂的问题,我应该尽可能多地包含细节。

但基本上可以归结为:我能否在具有 Sphero 和两堵墙的现实世界中实现我所附图像中所示的内容?

非常感谢。

4

1 回答 1

1

X 和 Y 大小表示沿地面平面的碰撞的 2D 矢量。您设置的问题在于,为了准确计算反射角,更容易知道墙壁的位置。您可以尝试反映机器人正面的角度,然后将其添加到当前航向。因此,如果您以航向 0 行驶,在 45 度处发生碰撞,首先反映机器人前方的角度(-45 或 315),然后添加当前航向(0 + 315 = 315)。这应该让您大致了解沿着什么角度行进以使球看起来像是从墙上“弹回”。

于 2014-05-01T06:07:31.410 回答