计算移动圆的碰撞,不重叠边界

2024-02-19

假设我有一个圆在矩形区域内弹跳。在某个时刻,这个圆将与矩形的一个表面碰撞并反射回来。我这样做的通常方法是让圆与边界重叠,然后反映速度矢量。圆实际上与边界重叠的事实通常不是问题,在低速时也不是很明显。在高速行驶时,很明显圆圈正在做一些不应该做的事情。

我想做的是以编程方式考虑反射,并将圆圈放置在正确的位置,然后再将其显示在屏幕上。这意味着我必须计算它到达当前位置和未来位置之间边界的点——而不是计算它的新位置,然后检查它是否到达边界。

这比通常的圆形/矩形碰撞问题稍微复杂一些。我对应该如何做有一个模糊的想法 - 基本上在当前位置和新位置之间创建一个边界矩形,这带来了它自己的一系列问题(因为矩形是根据圆的方向旋转的)速度)。但是,我认为这是一个常见问题,并且已经存在通用解决方案。

此类问题有通用的解决方案吗?也许我应该研究一些基本理论?


由于只有一个圆形和一个矩形,因此实际上非常简单。半径为一个圆r在尺寸矩形内弹跳w, h可以像点一样对待p在圆的中心,矩形内(w-r), (h-r).

现在位置更新变得简单了。鉴于你的立场x, y和每帧速度dx, dy,更新后的位置为x+dx, y+dy- 除非你跨越边界。比如说,如果你最终得到x+dx > W(让W = w-r),然后执行以下操作:

crossover = (x+dx) - W // this is how far "past" the edge your ball went
x = W - crossover // so you bring it back the same amount on the correct side
dx = -dx // and flip the velocity to the opposite direction

同样对于y。您必须为每个维度中的相反边界设置类似的(反射的)检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算移动圆的碰撞,不重叠边界 的相关文章

  • 使用Unity3D Physics来工作

    这个教程将教你如何用Unity3D构建一个小球击倒柴火堆的游戏 xff01 在这个过程中 xff0c 你将了解到关于使用物理引擎的重要性和你这么做后可以减少无数小时的手工动画的时间 继续阅读 xff01 有什么完整的现代游戏引擎会缺少物理引
  • SpriteKit:如何创建基本物理关节

    我正在尝试在两个 SKPhysicsBodies 之间创建简单的关节 但是 他们的行为很奇怪 我很清楚锚点应该位于场景坐标上 请查看随附的源代码 例如 这就是在矩形上附加小正方形后固定关节的结果 void createFixedJointO
  • 使用物理定律模拟轨道[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在过去的几周里 我一直在尝试模拟太阳系模拟中的轨道 这是我作为大学模块的一部分进行的 简而言之 我的模拟是使用 Ogre3D 渲染引擎用 C 编写的 我尝试使用牛顿万有引力定律来
  • 有没有办法重新格式化方程以从公式中获取未知变量?

    我正在制作一个应用程序 我想在其中使用数学和物理的公式 方程 我在每个公式中都包含了一个计算器部分 以便用户能够插入他的值并获得方程的结果 问题是 我需要为每个未知变量重新格式化方程 是否有脚本 或者至少有某种算法能够做到这一点 我正在使用
  • 基于鼠标的Unity3d瞄准

    我正在制作炮弹射击游戏 这是一个简短的代码 我在其中计算瞄准方向 Vector3 mousePos Input mousePosition mousePos z thisTransform position z camTransform p
  • 找到发射弹丸的角度以到达特定点

    所以 Dani 在他的稍微新的视频中 gt 制作游戏 但我只有 3 天 https youtu be S7Dl6ATRK2M 制造了一个拥有弓箭的敌人 5 39 我试图重新创建它 但没有运气 我也找不到他使用的网站 今天我发现了这个http
  • 找到点的质心[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有N分 每个点都有 X 和 Y 坐标 我需要找到该点的质心 X 和 Y 你能给我一个算
  • 如何让物体忽略重力(AndEngine)?

    我有一个精灵 有身体 在场景中弹跳 它需要不受重力影响 但也能够与场景中的其他物体发生碰撞 这意味着我无法使用运动体 我试过 body PhysicsFactory createCircleBody mPhysicsWorld this B
  • 使用 Python 数值求解 ODE

    我正在使用 Python 数值求解谐振子的 ODE 当我添加驱动力时 它没有任何区别 所以我猜测代码有问题 任何人都可以看到问题吗 这 h m f0 np cos wd i 部分是动力 import numpy as np import m
  • 无法区分 Sympy 中的复杂变量

    我知道这个标题听起来像是一个重复的问题Sympy 无法区分变量 但我相当确定它是完全不同的 如果我弄错了 我提前道歉 我正在尝试使用哈密顿力学求解双摆 但 Sympy 在获取其中一种导数时遇到困难 代码如下 但更容易阅读iPython No
  • 在科学环境中进行编程实践? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 背景 去年 我在一所大学的物理研究小组实习 在这个组中 我们主要使用的是LabVIEW http en wikipedia org w
  • 2D 软体:凝胶状和可塑性?

    我正在使用 Matter js 物理学来尝试创建软体 我能够创建这样的身体 但我不确定这是否是我想要的 软体 确实 这个物体并不完全是刚性的 并且在碰撞和被拖动时具有弹性的感觉 我一直在寻找与凝胶有相似之处的身体 这张图片可能在视觉上有助于
  • THREE.js - 旋转移动 3D 球

    我是 THREE js 的新手 对物理学的了解非常少 但我正在尝试构建一个足球游戏引擎 从顶部看 而现在我正在努力处理球的运动 当尝试将球从一侧移动到另一侧时 旋转始终面向一个方向 我不明白如何使其沿其移动方向旋转 我添加了一个简单的代码来
  • 如何在 python 上解决 TISE 的简单边值问题

    我正在尝试求解无限势阱的 TISEV 0在间隔上 0 L 这个练习给我们提供了波函数及其导数的值0 is 0 1分别 这使我们能够使用scipy integrate odeint函数来解决给定能量值的问题 现在的任务是在给定波函数的进一步边
  • 二维轨道物理

    我正在为游戏开发 2D 物理引擎 我使用简单的迭代方法让重力和质量起作用 我知道我最终必须升级 我可以手动推动群众并观察他们移动 一切都按照我的预期进行 现在我正在尝试用一颗围绕行星的简单圆形轨道上的卫星提前设置游戏世界 为此 我需要在给定
  • 对推力从当前速度矢量到目标矢量的平滑变化进行编程

    TL dr 我不确定如何计算一个矢量与另一个矢量之间的推力的平滑过渡 我正在编写一个简单的游戏 敌人在开放空间 没有墙壁 中追赶玩家 我独立计算敌人的 x 和 y 速度 如果敌人朝着玩家的方向前进 则加速它们 如果敌人走错路 则快速减慢它们
  • 车祸最低门槛

    我正在使用加速度计来检测车祸 我遇到了检测车祸所需的最小阈值的问题 检测车祸所需的最低阈值是多少 Override public void onSensorChanged SensorEvent event float x event va
  • 通过距离和摩擦力计算速度

    我正在用 Javascript Canvas HTML5 编写一个游戏 我刚刚发现了一个与高等数学相关的大问题 该游戏是平面 2D 游戏 因此您可以从另一个角度看世界 这意味着没有重力 只有摩擦力 CODE var friction 0 9
  • 为什么 Box2D 不应该使用像素作为单位?

    手册中说我应该使用小单位 0 1 10米 不鼓励使用像素作为测量单位 但是为什么 Box2D 比我使用小单位时工作得更好 并且具有更好的模拟效果呢 Box2D 是一个模拟框架 内部使用MKS 单位制 http en wikipedia or
  • 弹簧质量系统的阻尼效果(或者这是 ElasticEase?)

    我试图在代码中模拟动画效果 几乎任何语言都可以 因为它看起来是数学而不是语言 本质上 它是质量弹簧系统的仿真 我一直在研究 WPF Silverlight 的ElasticEase这似乎与我正在寻找的非常接近 但又不完全一样 首先 这就是我

随机推荐