开发者社区> 问答> 正文

组合速度大于初始速度

我正在用Java制作台球游戏。我使用本指南解决冲突。在测试过程中,我注意到碰撞后两个碰撞池球之间的速度更高。额外速度的量似乎为0%-50%。连拍大约为0%,超宽镜头为50%。我假设组合速度将保持不变。是我的代码还是我对物理学的理解错了?

private void solveCollision(PoolBall b1, PoolBall b2) {

    System.out.println(b1.getMagnitude() + b2.getMagnitude());

    // vector tangent to collision point
    float vTangX = b2.getY() - b1.getY();
    float vTangY = -(b2.getX() - b1.getX());

    // normalize tangent vector
    float mag = (float) (Math.sqrt((vTangX * vTangX) + (vTangY * vTangY)));
    vTangX /= mag;
    vTangY /= mag;

    // get new vector based on velocity of circle being collided with
    float NVX1 = b1.getVector().get(0) - b2.getVector().get(0);
    float NVY1 = b1.getVector().get(1) - b2.getVector().get(1);

    // dot product
    float dot = (NVX1 * vTangX) + (NVY1 * vTangY);

    // adjust length of tangent vector
    vTangX *= dot;
    vTangY *= dot;

    // velocity component perpendicular to tangent
    float vPerpX = NVX1 - vTangX;
    float vPerpY = NVY1 - vTangY;

    // apply vector to pool balls
    b1.setVector(b1.getVector().get(0) - vPerpX, b1.getVector().get(1) - vPerpY);
    b2.setVector(b2.getVector().get(0) + vPerpX, b2.getVector().get(1) + vPerpY);

    System.out.println(b1.getMagnitude() + b2.getMagnitude());

}```


问题来源:Stack Overflow

展开
收起
montos 2020-03-27 22:37:33 481 0
1 条回答
写回答
取消 提交回答
  • 并非所有的解释都将严格围绕主题进行,我将假设最小的知识来适应将来的潜在用户-不幸的是,某些人因此可能会觉得很花哨。

    速度不是守恒量,因此碰撞前速度的总和不一定等于碰撞后速度的总和。

    对于非弹性碰撞,这更直观,尤其是当您考虑诸如小行星与地球的月球1碰撞的情况时,典型的撞击速度约为每秒10-20 公里。如果在这种情况下标量速度保持不变-即使在45°的“广角”撞击角(最可能的情况)下,月球产生的速度也足以将其从地球轨道弹出。

    因此很明显标量速度不一定非弹性碰撞所要守恒。弹性碰撞不太直观。

    就像您已经指出的那样,这是因为存在这样一种情况:在完全弹性碰撞中标量速度得以保留(直线碰撞),而非弹性碰撞则永远不会保留速度2。这产生了不可接受的不一致。

    为了纠正这一点,我们必须将速度视为向量而不是标量。考虑两个球之间最简单的弹性碰撞:一个球处于静止状态,第二个球撞击第一个“笔直”(撞击角度为90°)。第二个球将停下来,第一个球将以等于第二个初始速度的速度离开碰撞。速度保持不变-前后速度的总和相等-一切都很好。

    但是,对于90°以外的冲击角,情况并非如此,因为幅度和不能解决抵消的矢量分量。假设您又有一个球静止,第二个球以45°击中。然后,两个球都将从第二个球的初始行进方向3倾斜45度角离开碰撞。这样,两个球也将具有平行于初始运动方向的相同速度分量,并且相等但相反垂直速度分量。当取一个矢量和时,两个垂直分量将抵消,两个平行分量的和将恢复初始速度矢量。但是,每个球的速度矢量的大小将大于第二个球的初始速度的大小-因为该大小是通过平方值的总和计算的,因此不考虑相反的分量。

    当然,最好的方法不是看速度,而是看动量-决定上述行为的是动量守恒,关于动量的解释很简单:它表明在完全弹性的碰撞中,速度质心的绝对值不能改变。

    回答来源:Stack Overflow

    2020-03-27 22:38:01
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
用计算和数据去改变整个世界 立即下载
低代码开发师(初级)实战教程 立即下载