gpt4 book ai didi

java - 解决圆间二维弹性碰撞的简单方法

转载 作者:行者123 更新时间:2023-12-02 10:18:53 24 4
gpt4 key购买 nike

我需要最简单的解决方案来解决圆之间的二维弹性碰撞,每个圆与其他圆具有相等的质量。

环境是 Android Canvas ,其中 Y 轴向下增长。圆的逻辑表示是类PlayerBall,它已成功检测到碰撞。 PlayerBall 有字段:

xy圆心位置

velXvelY 圆周运动的速度 vector 表示为两个标量值,可以是正值或负值。

直径 - 圆的直径

public static void resolveCollision(PlayerBall ballOne, PlayerBall ballTwo) 
{
double collisionAngle = Math.atan2(ballTwo.y - ballOne.y, ballTwo.x - ballOne.x); // angle for ball one
// calculating new velocities between ballOne and ballTwo
...
// setting the new velocities for both balls
ballOne.setVelocity((float)ballOneVelX, (float)ballOneVelY);
ballTwo.setVelocity((float)ballTwoVelX, (float)ballwTwoVelY);

}

我预计球的速度会根据本文 https://en.wikipedia.org/wiki/Elastic_collision#Two-dimensional_collision_with_two_moving_objects 中定义的公式发生变化

最佳答案

如果您知道两个质量的 x 和 y 速度,那么您实际上不需要碰撞角度。球上的 x 和 y 合力可以通过它们各自的质量和速度的乘积来计算。

您可以通过以下公式定义这种关系:

V_xr1 = (V_x1 * (m1 - m2) + (2 * m2 * V_x2)) / (m1 + m1)

其中 V_x1 表示纯粹在 x 平面上的速度,m1 和 m2 是球的质量。这将为您提供合成的 x 速度。您可以应用相同的逻辑来计算 y 方向的合力。

let newVelX1 = (vel1.vX * (m1 - m2) + (2 * m2 * vel2.vX)) / (m1 + m2);
let newVelY1 = (vel1.vY * (m1 - m2) + (2 * m2 * vel2.vY)) / (m1 + m2);

关于java - 解决圆间二维弹性碰撞的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54483073/

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