gpt4 book ai didi

android - 如何使用 Sphero 使用 CollisionDetectedAsyncData 模拟物理世界中的 2D 碰撞?

转载 作者:行者123 更新时间:2023-11-29 01:52:40 26 4
gpt4 key购买 nike

我正在使用 sphero Android SDK。

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

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

我有一个项目设置,我在其中监听碰撞并且还获取流式 LocatorData。所以我可以使用 LocatorData 和 CollisionDetectedAsyncData。当根据我设置的阈值检测到碰撞时,我记录 CollisionDetectedAsyncData 实例,然后尝试基于它进行一些计算。问题是,当涉及到 CollisionDetectedAsyncData 究竟包含什么时,我仍然不明白。我不明白 powerX 和 powerY 是什么。医生说是量级,但量级是多少?在这里请原谅我的无知。如你所知,我在物理系很弱。无论如何,当当前加速度矢量与前一个加速度矢量的差值超过 15000 时,我也会记录 LocatorData。这是我的日志的一个 fragment 。

(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 和两堵墙实现我所附图片中所示的内容?

非常感谢。

最佳答案

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

关于android - 如何使用 Sphero 使用 CollisionDetectedAsyncData 模拟物理世界中的 2D 碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com