- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我首先使用蛮力进行了 2D n 体模拟,但随后遵循 http://arborjs.org/docs/barnes-hut我已经实现了 Barnes-Hut 近似算法。然而,这并没有给我我想要的效果。
例如:
巴恩斯小屋 -> 2000 具尸体;平均帧时间32 毫秒和 5000; 164 毫秒
蛮力 -> 2000 具尸体;平均帧时间31 毫秒和 5000; 195 毫秒
这些值是关闭渲染的。
我是否正确地假设我没有正确实现算法,因此没有获得性能的显着提高?
Theta 当前设置为 s/d < 0.5。将此值更改为例如1 确实提高了性能,但很明显为什么这不是首选。
单线程
我的代码大致如下:
while(!close)
{
long newTime = System.currentTimeMillis();
long frameTime = newTime-currentTime;
System.out.println(frameTime);
currentTime = newTime;
update the bodies
}
在更新主体的函数中:
first insert all bodies into the quadtree with all its subnodes
for all bodies
{
compute the physics using Barnes-Hut which yields a net force per planet (doPhysics(body))
calculate instantaneous acceleration from net force
update the instantaneous velocity
}
barneshut 函数:
doPhysics(body)
{
if(node is external (contains 1 body) and that body is not itself)
{
calculate the force between those two bodies
}else if(node is internal and s/d < 0.5)
{
create a pseudobody at the COM with the nodes total mass
calculate the force between the body and pseudobody
}else (if is it internal but s/d >= 0.5)
{
(this is where recursion comes in)
doPhysics on same body but on the NorthEast subnode
doPhysics on same body but on the NorthWest subnode
doPhysics on same body but on the SouthEast subnode
doPhysics on same body but on the SouthWest subnode
}
}
实际计算力:
calculateforce(body, otherbody)
{
if(body is not at exactly the same position (avoid division by 0))
{
calculate force using newtons law of gravitation in vector form
add the force to the bodies' net force in this frame
}
}
最佳答案
您的代码仍然不完整(请阅读 SSCCE s ),深入调试不完整的代码不是该站点的目的。然而,这就是我接下来要确定什么是错误的(如果有的话)的方法:
关于java - n-body Simulation 预期性能 barnes hut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51400308/
我正在编写一个应用程序,需要在数百个不断运动的粒子之间执行 n 体模拟。应用程序具有实时要求,因此执行仿真的算法需要快速。 我对此事进行了大量研究,得出的结论是 Barnes Hut 算法最适合我的需
我一直在尝试解决我的图形可视化应用程序中的力导向图/Barnes-Hut 问题。到目前为止,我已经检查了八叉树的创建,它看起来正确(树由方框表示,圆圈是我的图形节点): 我的 Quadtree 中的字
我正在 Chapel 中实现 Barnes-Hut n 体模拟的分布式版本。我已经实现了顺序内存和共享内存版本,这些版本可以在我的 GitHub 上找到。 . 我遵循 here 概述的算法(第 7 章
我首先使用蛮力进行了 2D n 体模拟,但随后遵循 http://arborjs.org/docs/barnes-hut我已经实现了 Barnes-Hut 近似算法。然而,这并没有给我我想要的效果。
我正在为一个类的 n 体问题创建 barnes-hut 算法。 我正在构建树,如下所示,但是在第一次迭代之后,在第一次递归时,它应该将包含主体的节点分割开来。它似乎做得很好,但我遇到了一个问题, bo
我正在尝试实现这个数据结构,一个 Barnes-Hut Octree ,我一直陷入无限循环,因内存不足异常而终止。 完整的 fiddle 在这里:http://jsfiddle.net/cWvex/但
我是一名优秀的程序员,十分优秀!