- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于我的建模和仿真类(class)项目,我想模拟一个太阳系。我从一颗恒星(太阳)和一颗行星(地球)开始,但我已经遇到了一些问题。我现在花了一些时间来回顾和学习不同的公式和方法来模拟行星的轨道将如何受到恒星和周围物体的影响。我想使用 velocity verlet 并最终研究 n-body 问题。我的 velocity verlet 函数有很多问题。有时它的行为就好像它在正常地绕地球轨道运行,然后它“曲速驱动”地球进入某个随机位置。我还注意到我从来没有得到“负”加速度,所以我的 x 和 y 坐标。总是在增加,所以我看不出地球应该如何环绕太阳。任何帮助是极大的赞赏。 AGK::Prints 我刚刚看到不同的变量是如何变化的。
double velocityVerlet(float positionCalc, double position2,
float &velocity, double massCalc, double mass2)
//positionCalc is the position being updated, position 2 is position of
// other object, same with mass
{
float force = forceFunc(positionCalc, position2, massCalc, mass2);
agk::PrintC("Force is: ");
agk::Print(force);
float acceleration = accelerationFunc(force,massCalc);
agk::PrintC("Accel is: ");
agk::Print(acceleration);`;
double newAccel = 0;
positionCalc = positionCalc + velocity*dt +
(.5*acceleration)*pow(dt,2); //calculates new position
agk::PrintC("New Position is: ");
agk::Print(positionCalc);
force = forceFunc(positionCalc,position2,massCalc,mass2);
newAccel = accelerationFunc(force, massCalc);
velocity = velocity + .5*(acceleration + newAccel)*dt; //new velocity
agk::PrintC("Velocity is: ");
agk::Print(velocity);
return positionCalc;
}
最佳答案
您的积分器接受标量以及您的问题是关于二维系统的事实让我认为您调用积分器两次,每个组件一次。这根本行不通,因为您的系统将在相空间中采取不切实际的移动。积分器使用 vector :
X(t+dt) = X(t) + V(t) dt + (1/2) A(t) dt2
V(t+dt) = V(t) + (1/2)(A(t) + A(t+dt)) dt
此处X(t) 是一个列 vector ,由所有 粒子的坐标组成 - 这是系统相空间的配置子空间。 V(t) 是所有粒子速度的列 vector ,技术上代表动量子空间。这同样适用于A(t)。这些必须同时更新,而不是分别更新。
整个速度 Verlet 过程在不依赖于速度的力场(例如经典重力)的代码中翻译如下:
Vector forces[num_particles];
// Compute initial forces
forces = computeForces(positions);
for (int ts = 0; ts < num_timesteps; ts++)
{
// Update positions and half-update velocities
for (int i = 0; i < num_particles; i++)
{
positions[i] += velocities[i]*dt + 0.5*(forces[i] / m[i]) * dt*dt;
velocities[i] += 0.5*(forces[i] / m[i]) * dt;
}
// Compute new forces and half-update velocities
forces = computeForces(positions);
for (int i = 0; i < num_particles; i++)
{
velocities[i] += 0.5*(forces[i] / m[i]) * dt;
}
}
请注意,在下一轮力评估之前,首先更新所有位置。此外,每次迭代只需要评估一次力,因为在第二次更新速度期间位置不会改变。在上面的示例代码中,Vector
是一个实现 n 维 vector 并包含 n
组件(例如 2d-case 中的 2)的类。它还重载了 +
和 +=
运算符以实现 vector (分量)加法,以及 *
和 /
通过标量实现乘法/除法。这只是为了说明情况,可以用每个位置/速度 vector 的分量上的内部循环代替。
正确选择时间步长非常重要。太小的时间步长会显着减慢模拟速度。太大的时间步将导致不可能的物理,例如。跳跃的行星。
关于c++ - 太阳系模拟项目(velocity verlet 帮助),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748196/
我正在使用 NetBeans 开发 Java 中的 WebService,并使用 gradle 作为依赖管理。 我找到了this article关于使用 gradle 开发 Web 项目。它使用 Gr
我正在将旧项目从 ant 迁移到 gradle(以使用其依赖项管理和构建功能),并且在生成 时遇到问题>eclipse 项目。今天的大问题是因为该项目有一些子项目被拆分成 war 和 jar 包部署到
我已经为这个错误苦苦挣扎了很长时间。如果有帮助的话,我会提供一些问题的快照。请指导我该怎么办????在我看来,它看起来一团糟。 *** glibc detected *** /home/shivam/
我在 Ubuntu 12.10 上运行 NetBeans 7.3。我正在学习 Java Web 开发类(class),因此我有一个名为 jsage8 的项目,其中包含我为该类(class)所做的工作。
我想知道 Codeplex、GitHub 等中是否有任何突出的项目是 C# 和 ASP.NET,甚至只是 C# API 与功能测试 (NUnit) 和模拟(RhinoMocks、NMock 等)。 重
我创建了一个 Maven 项目,包装类型为“jar”,名为“Y”我已经完成了“Maven 安装”,并且可以在我的本地存储库中找到它.. 然后,我创建了另一个项目,包装类型为“war”,称为“X”。在这
我一直在关注the instructions用于将 facebook SDK 集成到我的应用程序中。除了“helloFacebookSample”之外,我已经成功地编译并运行了所有给定的示例应用程序。
我想知道,为什么我们(Java 社区)需要 Apache Harmony 项目,而已经有了 OpenJDK 项目。两者不是都是在开源许可下发布的吗? 最佳答案 事实恰恰相反。 Harmony 的成立是
我正在尝试使用 Jsoup HTML Parser 从网站获取缩略图 URL我需要提取所有以 60x60.jpg(或 png)结尾的 URL(所有缩略图 URL 都以此 URL 结尾) 问题是我让它在
我无法构建 gradle 项目,即使我编辑 gradle 属性,我也会收到以下错误: Error:(22, 1) A problem occurred evaluating root project
我有这个代码: var NToDel:NSArray = [] var addInNToDelArray = "Test1 \ Test2" 如何在 NToDel:NSArray 中添加 addInN
如何在单击显示更多(按钮)后将主题列表限制为 5 个(项目)。 还有 3(项目),依此类推到列表末尾,然后它会显示显示更少(按钮)。 例如:在 Udemy 过滤器选项中,当您点击查看更多按钮时,它仅显
如何将现有的 Flutter 项目导入为 gradle 项目? “导入项目”向导要求 Gradle 主路径。 我有 gradle,安装在我的系统中。但是这里需要设置什么(哪条路径)。 这是我正在尝试的
我有一个关于 Bitbucket 的项目。只有源被提交。为了将项目检索到新机器上,我在 IntelliJ 中使用了 Version Control > Checkout from Ve
所以,我想更改我公司的一个项目,以使用一些与 IDE 无关的设置。我在使用 Tomcat 设置 Java 应用程序方面有非常少的经验(我几乎不记得它是如何工作的)。 因此,为了帮助制作独立于 IDE
我有 2 个独立的项目,一个在 Cocos2dx v3.6 中,一个在 Swift 中。我想从 Swift 项目开始游戏。我该怎么做? 我已经将整个 cocos2dx 项目复制到我的 Swift 项目
Cordova 绝对是新手。这些是我完成的步骤: checkout 现有项目 运行cordova build ios 以上生成此构建错误: (node:10242) UnhandledPromiseR
我正在使用 JQuery 隐藏/显示 li。我的要求是,当我点击任何 li 时,它应该显示但隐藏所有其他 li 项目。当我将鼠标悬停在文本上时 'show all list item but don
我想将我所有的java 项目(223 个项目)迁移到gradle 项目。我正在使用由 SpringSource STS 团队开发的 Gradle Eclipse 插件。 目前,我所有的 java 项目
我下载this Eclipse Luna ,对于 Java EE 开发人员,如描述中所见,它支持 Web 应用程序。我找不到 file -> new -> other -> web projects
我是一名优秀的程序员,十分优秀!