二维轨道物理

2024-02-01

我正在为游戏开发 2D 物理引擎。我使用简单的迭代方法让重力和质量起作用(我知道我最终必须升级);我可以手动推动群众并观察他们移动,一切都按照我的预期进行。

现在我正在尝试用一颗围绕行星的简单圆形轨道上的卫星提前设置游戏世界。为此,我需要在给定行星质量和所需距离的情况下计算卫星的初始速度矢量;这应该是微不足道的,但我一生都无法让它正常工作。

标准物理教科书告诉我,围绕质量 M 的圆形轨道上的物体的轨道速度是:

v = sqrt( G * M / r )

然而,在应用适当的矢量后,卫星的运行速度不够快,并陷入了尖锐的椭圆轨道。随机修补表明,在一种情况下,它的偏差约为 3 倍。

我的重力模拟代码使用传统的:

F = G M m / r^2

在我的宇宙中 G 设置为 1。

有人可以向我证实这些方程在二维空间中仍然成立吗?我看不出有什么理由不这样做,但此时我真的想知道问题是出在我的代码中还是我的假设中......


Update:我的物理引擎的工作原理如下:

for each time step of length t:
  reset cumulative forces on each object to 0.
  for each unique pair of objects:
    calculate force between them due to gravity.
    accumulate force to the two objects.
  for each object:
    calculate velocity change dV for this timestep using Ft / m.
    v = v + dV.
    calculate position change dS using v * t.
    s = s + dS.

(当然,在适当的情况下使用向量。)

现在我每帧都会做一个物理刻度,每秒发生大约 500-700 次。我知道这会很快积累错误,但它至少应该让我开始。

(顺便说一句,我无法找到一个现成的物理引擎来处理轨道力学——大多数 2D 物理引擎,比如 Chipmunk 和 Box2D 都更关注刚性结构。谁能推荐一个我可以看一下的引擎?)


您需要确保您的 delta t 迭代时间值足够小。为了获得您期望的行为,您肯定必须修改常量。在您的情况和大多数情况下,迭代模拟是一种集成形式,其中错误会快速且不可预测地累积。

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

二维轨道物理 的相关文章

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

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

    我试图继承 SFML 中的 Transformable 和 Drawable 以使我的对象 嗯 可变形和可绘制 我正在制作一个简单的突破游戏 但也许我的做法是错误的 这是我的代码 include
  • 旋转图像和像素碰撞检测

    我这里有这个游戏plunker http plnkr co edit VCdFyn3SE4wSZa0OLRRT p preview 当剑不旋转时 一切正常 您可以通过取消注释第 221 行并注释掉第 222 223 行进行检查 当它们像上面
  • 我应该如何在这个 2d Java 游戏中实现跳跃/重力/下落

    所以这是我的Player类 我想在空格键上跳转的对象 我只是不知道从哪里开始 我可以在互联网上阅读与我相关的任何好的资源吗 任何帮助都很棒 谢谢 package com zetcode import java awt Color impor
  • 如何在 2D 中的 2 个点之间创建一条曲线并获取每隔 d 距离形成该曲线的点?

    我数学不好 我有2点 A x1 y1 and B x2 y2 in 2D 我需要从点创建一条虚拟路径A to B在 R 半径 处弯曲 然后返回描述该弯曲路径的点数组 并非所有点都彼此相距 D 距离 在Java中我需要这样的方法 privat
  • Pygame:如何让我的图像下降?

    我试图让物体像在地球上一样下落 我已经让它们到了我想要的地方 但我似乎无法为它们设置动画 这就是我想要落下的物体 import pygame class circle def init self screen planet color 25
  • 更改Android自定义SurfaceView的大小

    我正在尝试为 Android 应用程序创建 2D 游戏引擎 我已经关注了本教程 http www droidnova com 2d tutorial series part ii 772 html 这对于创建全屏显示效果很好 但我不想要这样
  • C# 中的 N 体模拟

    我正在尝试使用 Runge Kutta 4 或 Velocity Verlet 集成算法在 C 中实现 N 体模拟 在我转向更多数量的粒子之前 我想通过模拟地球绕太阳的轨道来测试模拟 但是 由于某种原因 我得到的不是椭圆轨道 而是一个奇怪的
  • Android getX/getY 交错相对/绝对坐标

    有很多关于 MotionEvent getX getY 如何 不可靠 或其他术语 的讨论 以及我们应该使用这些调用的原始版本来获取坐标 在我的 Nexus 7 上 我发现 getX getY 可靠地返回交错的绝对和相对坐标 换句话说 假设给
  • 使用 mplot3d 绘制二维数组

    我有一个 2D numpy 数组 我想以 3D 形式绘制它 我听说过 mplot3d 但我无法正常工作 这是我想做的一个例子 我有一个尺寸为 256 1024 的数组 它应该绘制一个 3D 图表 其中 x 轴从 0 到 256 y 轴从 0
  • WPF 中的 2D CAD 应用

    我正在尝试在 WPF NET 4 0 中编写一个类似 CAD 的应用程序 它需要能够显示大量 2D 点 线 它将用于通过鼠标悬停时的缩放 平移 旋转和点捕捉来显示整个城市的 CAD 平面图 现在我纯粹使用WPF 我从 CAD 文件中读取对象
  • Python Pygame 游戏灯光

    我正在制作一款 2D 横向卷轴游戏 游戏中的一个物品是火炬 我有一个手臂可以旋转的玩家 我们可以获取手臂的角度 我正在寻找跟随手臂角度的三角形光束形状 我有一些想法 比如在整个屏幕上放置一个 alpha 图像 并根据手臂角度单独从每个像素中
  • 控制加速度直到到达某个位置的算法

    我有一个可以移动的点 在一维 并且我需要它平滑地移动 所以我认为它的速度必须是一个连续函数 我需要控制加速度 然后计算它的速度和位置 该算法对我来说似乎并不明显 但我想这一定是一个常见问题 我只是找不到解决方案 Notes 对象在移动时的最
  • 什么是好的、简单的、仅限 2D 矩形的碰撞检测算法?

    我正在为年轻人设计一个碰撞检测游戏教程 所以我希望它尽可能简单 以便更容易解释 要求非常简单 世界是二维的 仅包含矩形 任意大小 BSP 甚至四叉树似乎有点矫枉过正 再次强调简单性 但我想要比暴力破解所有 n n 1 2 可能的碰撞更有效的
  • 根据旋转角度计算XY运动?

    假设我在 2D 空间中有一个可以旋转的对象 然后应该根据其旋转角度移动 例如 如果角度为0 指向上方 则on timer它应该将 1 移动 Y 将 0 移动 X 如果角度为 45 那么它应该按 Y 移动 1 按 X 移动 1 如果指向 90
  • corona sdk中拖动物理对象

    我尝试在场景中拖动重力 0 0 的动态主体 我有一个主体类型为动态的正方形 以及一个主体类型为静态的图像 但是当将方形拖动到图像上时 它会产生一点力 但是可以超出图像并传递到另一边 如图所示 这是我拖动正方形的代码 local functi
  • 标准化设备坐标

    我正在编写一个处理 2D 图形形状的库 I m just wondering why should my coordinate system range from 1 1 for both the x and y axis instead
  • XNA 2D 矢量角度 - 正确的计算方法是什么?

    在 2D 中的 XNA 中矢量角度的标准工作方式是什么 向右 0 度 向上 90 度 向左 180 度 向下 270 度 什么是 标准 实现 float VectortoAngle Vector2 vec and Vector2 Angle
  • 更改 SKPhysicsBody 的身体形状

    除了定义 SKPhysicsBody 形状的主体之外 我不想更改任何其他内容 我该怎么做呢 我似乎找不到在哪里可以改变这个 甚至评论如何改变它 是的 我知道这必须小心完成 以便避免所有可能的新碰撞 重叠等 但抛开这些 我如何更改 SKPhy
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut

随机推荐

  • 如何在 iOS 设备上运行 .app [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有应用程序的 app 文件 我有 mac 和 iPhone 但没有安装 Xcode 如何在没有 Xcode 的情况下在 iPhone 上
  • 无法安装 SQL Server (setup.exe)

    我在笔记本电脑上使用了 SQL Server 2019 Express 版本 但我卸载了 现在我尝试安装 SQL Server 2019 Developer Edition 但出现错误 退出代码 十进制 2068119551 退出消息 找不
  • 使用 PostGIS 围绕线串创建多边形

    我是 PostGIS 新手 需要在这里寻求一些帮助 我有一条来自谷歌地图的折线 代表行程 需要在其周围构建一个具有特定距离 以米或公里为单位 的多边形 缓冲区 对于输入 我有纬度 经度点列表和所需的缓冲距离 任何人都可以帮助我构建查询 以便
  • 在我的网站中使用 PHPBB2 登录凭据

    我目前正在使用 PHPBB2 论坛作为我网站之一的一部分 并且我想扩展该网站 添加新页面 脚本等 我想将对这些页面的访问限制为已登录 PHPBB2 论坛的用户 事实上 如果只有某个 MemberGroup 的成员可以访问这些页面 那就太好了
  • 是否可以检测弹窗中的用户点击事件?

    如果当前 url 和弹出 url 位于同一域中 我可以使用以下代码检测弹出窗口中的用户单击事件 var myWindow window open abc html MsgWindow width 500 height 600 myWindo
  • 在 BST 中寻找 k 个后继者的时间复杂度

    给定高度的二叉搜索树 BST h 需要O k h 时间来应用BST InOrder Successor 算法 https stackoverflow com a 5471990 5459839 k连续多次 从任何节点开始 将每个下一个调用应
  • Python创建字典键路径类似于mkdir -p

    假设我们有一个从 json 解析出来的字典 并且我们以键路径的形式从键中读取值path to my keys my dict path to my keys 在文件系统中我们有mkdir p如果不存在则创建这样的路径 在Python中 我们
  • 来自 iCal Feed URL 的活动在 Google 日历中显示为“忙碌”

    我正在尝试在 Google 日历中查看我的系统生成的 ical 格式的日历源 我通过 Google 日历 其他日历 下拉菜单中的 按 URL 添加 功能来执行此操作 并将 URL 提供给动态生成的 ics ical 文件 Google 日历
  • 每当值在 r 中重复时进行识别

    我有一个像这样的数据框 data lt data frame Condition c 1 1 2 3 1 1 2 2 2 3 1 1 2 3 3 我想填充一个新变量Sequence每当Condition又从1开始 所以新的数据框看起来像这样
  • 在 PHP 中使用标头传递 GET 变量

    我正在为网站编写 仅限用户 访问权限 当用户未登录时 仪表板将重定向到登录页面 但登录页面没有收到 GET 变量 你能告诉我我做错了什么吗 使用时标头位置 http php net manual en function header php
  • 在 Eclipse 中从验证中排除目录和子目录

    如何在 Eclipse 中从验证中排除文件夹及其子目录 我知道您可以右键单击包资源管理器中的文件夹并选择排除验证 但如果它下面有子目录 则必须为每个子目录执行此操作 并且对于生成的目录或具有许多子目录的目录来说并不理想 文件夹 有什么插件可
  • 如何在 MSBuild WebProjectOutputDir 中留有空格?

    我正在尝试从命令行调用 MSBuild 当我使用没有空格的路径时 一切工作正常 但现在我有一个有空格的路径 并且命令失败 命令 有效 C Windows Microsoft NET Framework v3 5 MSBuild exe t
  • 在 Struts2 中的一个操作类本身中创建多个方法?

    我可以在同一个操作类中创建两个方法吗 如果是这样 我们如何在struts xml file 例如 我创建了一个简单的验证操作类来验证email address也password使用两个单独的正则表达式 我在 Action 类中创建了两个方法
  • SQLAlchemy 中的过滤关系

    我有以下场景 class Author Base tablename author id Column Integer primary key True name Column String books relationship Books
  • 对齐 Excel 2013 和 R 的数值精度

    这是一个相当广泛的问题 但我在 R 中复制了一个 Excel 模型 R 产生的结果与 excel 几乎相同 但总是在 10 8 范围内存在轻微的 偏差 我认为这是由于数值精度造成的 该模型仅使用基本算术运算 我的问题是 有没有一种简单的方法
  • 在 Emacs html 模式下关闭块着色

    load elisp nxhtml autostart el setq mumamo chunk coloring no chunks colored 目前 我的 emacs 中有上述内容 并且块着色仍然显示 我还尝试通过自定义选项禁用它
  • 如果 URL 以某个字符串开头,Apache .htaccess 将 URL 转换为小写

    我需要创建一个小写重定向规则 所有以以下开头的网址 catalog 一定是小写的 例子 catalog Foo gt catalog foo catalog Foo fOO2 gt catalog foo foo2 你能帮助我吗 假设您使用
  • 如何使用 django 服务器 HTTP/2 协议

    我计划使用 HTTP 2 协议部署 Django 应用程序 但我无法找到正确的解决方案 我如何使用 HTTP 2 为我的 Django Web 应用程序提供服务 我唯一发现的是hyper h2 https github com python
  • 如何通过列表视图适配器中的单击按钮打开菜单上下文Android?

    如何通过列表视图适配器中的单击按钮打开菜单上下文Android 我尝试使用我的代码 但不显示菜单上下文 code public View getView int position View convertView ViewGroup par
  • 二维轨道物理

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