【问题标题】:Curling/Shuffleboard game, making the stone move in more than 1 direction冰壶/沙狐球游戏,使石头向多个方向移动
【发布时间】:2013-11-20 13:16:47
【问题描述】:

我正在用 Java 创建一个小型冰壶/沙狐球游戏,我在其中强调物理。

目前游戏可以使用以下公式沿 x 轴推冰壶石来计算 x 位置。玩家可以决定初始 x 速度。

xPos = xIniVel* time - 0.5 * mu * mass * g * time* time;

我正在使用一个 gameTimer,只要球在运动,它就会运行。

double speed = xIniVel- mu * G * mass * time;

if (speed <= 0.0) {gameTimer.stop();}

方法 updateDisplay() 然后在新位置重新绘制球/冰壶。

int x = (int) (xPos* 100);
int y = (int) (yPos* 100);
g.setColor(Color.green);
g.fillOval(x, y, 22, 22);

我遇到的问题是如何在 x 轴以外的任何地方制作石头?最好我希望玩家输入一个角度,但初始 y 速度也可以。

编辑:Screenshot of the game.

【问题讨论】:

    标签: java simulation physics


    【解决方案1】:

    通过为 y 速度添加与 x 完全相同的代码

    yPos = yIniVel* time - 0.5 * mu * mass * g * time* time;
    

    【讨论】:

    • 我试过了,为 x-iniVel 输入 1,为 yIniVel 输入 0,这样可以使冰壶石保持在 y 轴上。相反,石头向上做了一个小转弯。速度变量也必须修改,记住 y 初始 vel。
    • 0.5代表什么?
    • 使用此列表中的公式 [5]。 upload.wikimedia.org/math/4/3/6/…
    • 他正在计算当前位置,所以他需要计算给定时间行进的距离。像 d = vt + (1/2)at^2
    【解决方案2】:

    使用初始角度和速度的一种简单方法是使用三角函数来求解 x 速度和 y 速度分量。

    http://www.physicsclassroom.com/class/vectors/u3l2d.cfm

    此网页提供了这样做的基本理解。然后只需复制您用于 x 位置的代码,并将 x 初始速度替换为 y 初始速度。

    另外,你的运动方程似乎有些缺陷。即使没有初始速度,你仍然会得到一个增加的负位置。这是因为 xIniVel * time = 0,那么 0 - (0.5*mu*mass*g*time^2) = -(0.5*mu*mass*g*time^2)。

    【讨论】:

    • 谢谢。我现在使用:xVel = iniVel * Math.cos(angle); yVel = iniVel * Math.sin(角度);但正如你所说,运动方程并不完全正确。石头在应该沿直线移动时以曲线移动。
    • 嗯,冰壶上的唯一力是摩擦力,所以这意味着净力是 Mumg。由于 Fnet = ma,则 a = Mu * g。所以运动方程应该是D=(vt)-(0.5*(Mu*g)*t^2)。应该注意的是,在这种情况下,您需要使用 Mu 的动摩擦系数,如果我没记错的话,它应该是在物体停止时为零。希望这会有所帮助。
    • 再次感谢。我以不同的方式重新开始。现在用户只需写一个角度和起始速度。然后我使用 sinus 和 cosinus 来分割 x 和 y 的速度。然后我只是 xPos = xPos + IniVelx * time,而 IniVelX = IniVelx * mu。然后对 Y 也是如此。至少它可以工作。
    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多