查找对象在2D网格中的距离的百分比

时间:2018-04-03 22:02:33

标签: java arrays swing

annotated graph image 对于我的计算机科学项目,我正在制作一个迷宫游戏。我已经编写了一个随机化的prims算法,用于随机制作迷宫,效果很好。 我添加了一个对象,我想用它来播放音乐(显示为上面链接的图像中的黄色方块)。如果播放器(图像中显示为红色)位于[0,0](左上角)且收音机位于[7,4](右下角),我希望音量非常安静。如果播放器和收音机并排,我希望音量最大。我希望将音量存储在一个double中(范围从0.0表示无音频,1.0表示完整音量。我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果您只想获得播放器和收音机之间的直接距离,而不是他们在迷宫中走的距离,那么您可以将用户当前距离作为最大距离的百分比。< / p>

最大距离为[0,0]至[n-1,m-1],其中n和m是网格的高度和宽度。在您的示例中,收音机水平放置7个单位,垂直放置4个单位。应用毕达哥拉斯定理得到我们~8.06单位作为最大距离。

与收音机相比,当前距离就在用户所在的位置。如果用户在[3,2],那么它们水平距离4个单位,垂直距离2个单位。再次应用毕达哥拉斯定理,用户距离大约4.46个单位。

以百分比形式表示,用户距离收音机的最大距离约为55%。然后,您可以将音量设置为(100-55)%= 45%。您可能还希望将最小音量限制在20-30%,这样即使音乐刚刚开始,他们也可以听到音乐。

P.S。如果步数太大,您可以添加一个计时器,以较小的步骤平滑过渡音量,而不是突然改变音量。