我正在使用sphero Android SDK。
考虑突破克隆(如Arkanoid)以及2D游戏中的球如何从屏幕的横向边缘以及屏幕顶部反弹。我相信它弹跳的方式使用基本的“反射”,并且一切都是无摩擦的,没有旋转力或重力等。球的速度只受球撞击球的方式影响,也许是一些特殊的砖加速它了。假设我们在现实世界中设置类似的东西,我们有一个相当狭窄的走廊,也许墙壁相距仅1米。让我们扔掉砖块和球拍,只有2个墙和1个球(球当然是Sphero)考虑链接到图像。 Sphero 2D collision emulation with real physical walls
假设我通过滑动或操纵杆操作在某个方向上开球,或者甚至只是以特定速度以所述方向以编程方式将其发送出去,以便当它击中第一个时它具有一些速度(x,y)墙,有什么方法可以使用CollisionDetectedAsyncData中包含的数据来确定撞击时速度是什么,以及墙和穿过球心的线和撞击点之间的角度球,所以我可以像在图像中所示的2D突破克隆那样使球“反弹”?如果我能弄清楚撞击时的速度和角度,那么我应该能够做到。 “弹跳”后球的速度与撞击墙壁前的速度相同。
我有一个项目设置,我正在侦听冲突,我也正在获取流媒体LocatorData。所以我可以使用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
(适用LocatorData)
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和两面墙吗?
非常感谢。
答案 0 :(得分:1)
X和Y幅度表示沿地平面的碰撞的2D矢量。设置的问题在于,为了准确计算反射角,更容易知道墙的位置。您可以尝试反映机器人前方的角度,然后将其添加到当前航向。因此,如果您在航向0处驾驶时接收到45度的碰撞,首先反映机器人前方的角度(-45或315),然后添加当前航向(0 + 315 = 315)。这应该会让你粗略地了解要沿着什么角度前进,以使它看起来像球一样弹跳"在墙上。