java - 解决圆之间二维弹性碰撞的简单方法
问题描述
我需要最简单的解决方案来解决圆之间的 2D 弹性碰撞,每个圆与其他圆具有相同的质量。
环境是 Y 轴向下增长的 Android 画布。圆的逻辑表示是具有成功碰撞检测的PlayerBall类。PlayerBall 具有以下字段:
圆心的x和y位置
圆运动的velX和velY速度向量表示为两个标量值,可以是正数或负数。
直径- 圆的直径
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
解决方案
推荐阅读
- php - Laravel 数据库关系不起作用
- security - 放置模型/属性权限的位置
- ruby-on-rails - 具有可覆盖树路径 slug 的 FriendlyID
- python-3.x - 如何从 matplotlib 获取轮廓处理程序?
- php - 无法使用 sqlserver 连接到数据库?
- flutter - 如何在 Flutter 的画布上的路径内绘制图案?
- ansible - Ansible - 环境变量剧本
- python - Flask - 更改现有数据库中的列类型
- swift - 复选框不能在 swift 中单独工作。我怎样才能让它分开?
- azure - 创建 Azure 管道时出现 ResourcePurchaseValidationFailed 错误