问题标签 [physics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2227 浏览

c# - WPF:移动速度(平移)随距离而变化

参考我目前正在构建的这个编程游戏。

我编写了以下方法来将画布移动(平移)到特定距离并根据其当前角度:

它接受的参数之一是平移时应覆盖的像素数。

关于上面的代码,Animator_Body_XAnimator_Body_Y是 类型DoubleAnimation,然后应用于机器人的TranslateTransform对象:Translate_Body


我面临的问题是机器人(它是一个画布)根据输入的距离以不同的速度移动。因此,距离越远,机器人移动的越快!换个角度来看,如果输入的距离是20,机器人移动得相当慢,但如果输入的距离是800,它就会从屏幕上射出。

我需要使这个速度恒定,与输入的距离无关。

我想我需要根据输入的距离调整一些Animator_Body_XAnimator_Body_Y属性,但我不知道要准确调整什么(我认为一些数学也必须完成)。

以下是您可能想要查看的属性列表以解决此问题。DoubleAnimation

0 投票
4 回答
8734 浏览

simulation - 带网格的水模拟

一段时间以来,我一直在尝试使用从“游戏的实时流体动力学”中获得的算法来模拟流动的水。问题是我似乎没有用这些算法摆脱像水一样的行为。

我自己我想我做错了什么,那些算法并不都适合水状流体。

这些算法我做错了什么?这些算法完全正确吗?

我在bitbucket 存储库中有相关的项目。(需要gletools和最新的pyglet才能运行)

0 投票
4 回答
1468 浏览

wpf - 如何在 Silverlight 中操纵用远见物理学制作的布娃娃?

我制作了一个类似于此演示中的布娃娃。这个布娃娃将用于回合制 rpg 游戏,其中物理将用于动画,例如角色受到伤害、死亡、摔倒等。

我现在正在思考的是,这应该怎么做,我应该把布娃娃的头贴在背景上(让身体悬空),然后基本上把它的身体部位四处乱扔,模拟打孔等(如图所示)图1),或僵硬关节并静态旋转和移动身体部位进行动作(如图2所示),当涉及到角色死亡(或类似动作)时,只需松开关节并让抹布娃娃掉下来。还是有更好的方法来做到这一点?

我是新手物理学的新手,甚至不知道我提到的是否有可能或非常难以做到。

插图 http://img3.imageshack.us/img3/8681/charactermovementrg5.jpg

请注意图中的红线代表人物的手臂

0 投票
10 回答
85858 浏览

c# - 如何计算弹跳角度?

我玩了一段时间,但我根本无法弄清楚。

我做了一个发射导弹的坦克,当导弹击中墙壁时,我希望它们反弹,但我希望它们反弹到正确的角度。

现在我没有任何障碍物,导弹在viewportRectangle我制造的外面时会反弹。

我正在寻找的解决方案是否非常先进?

有没有相对简单的方法来做到这一点?

0 投票
3 回答
2344 浏览

math - 帮我解决刚体物理/变换

我想实例化一个滑块约束,它允许一个物体在 A 点和 B 点之间滑动。为了实例化约束,我将两个物体分配给约束,在这种情况下,一个动态物体被约束到静态世界,想想滑动门. 第三个和第四个参数是变换,参考帧 A参考帧 B。为了创建和操作变换,该库支持四元数、矩阵和欧拉角。

默认滑块约束沿 x 轴滑动主体。我的问题是: 我如何设置这两个变换,以便身体 B 沿着由它自己的原点和空间中的一个附加点给出的轴滑动?

我天真地尝试过:

然而,四元数似乎并没有像我预期的那样工作。我对它们的数学知识不好,所以如果有人能告诉我为什么这不起作用,我将不胜感激。发生的情况是身体沿着与方向正交的轴滑动。当我在四元数构造函数中改变旋转部分时,主体围绕该滑动方向旋转。

编辑: 框架是子弹物理。这两个转换是滑块关节如何相对于每个身体的局部坐标系附加在每个身体上。

Edit2 我还可以通过正交基设置变换的旋转部分,但是我必须可靠地从单个向量构造正交基。我希望四元数能阻止这种情况。

Edit3 我在以下过程中取得了一些有限的成功:

但是,GramSchmidt 总是翻转 trafoB 矩阵的某些轴,并且门出现颠倒或从右到左。我希望有一种更优雅的方式来解决这个问题。 Edit4 我找到了一个解决方案,但是如果顶部向量与滑动方向对齐,我不确定这是否会导致约束求解器出现奇点:

0 投票
13 回答
3630 浏览

optimization - 如何优化我的基本物理模拟器?

我编写了一个简单的物理建模器,可以让我在屏幕上弹跳球。您可以单击并拖动来发射一个球,或者您可以一次生成数百个球并观察它们之间的相互作用。

替代文字
[链接到更大的版本]

这是一个有趣的小程序,如果可以的话,我想更进一步。我知道他们说过早的优化是万恶之源,但我开始遇到实际的性能障碍,我想知道是否有经验丰富的游戏/模拟器开发人员可以帮助我。

问题:

现在,如果你添加太多球,我的程序就会窒息(在我的机器上它似乎无法处理超过 800 个)。如果这样做,模拟将不再真实,并且所有球在底部相互重叠。

问题在于碰撞检测。在最简单的情况下,碰撞检测是一个 O(N^2) 问题。每个球检查每个其他球。这很快就会变得很糟糕(即使在 100 个球之后,每个循环周期你也要进行 10k 次碰撞检查)。

如果你看这里,你可以看到我添加了数百个球的屏幕截图。模拟器跟不上,它们开始相互重叠。

替代文字
[链接到更大的版本]

目前,我通过寻找重叠的球来检测碰撞。如果我找到两个重叠的球,我会用它们的最小平移距离 (MTD) 将它们分开,或者将它们推开。然后我使用一个简单的物理方程来调整它们的冲量矢量,然后它们在碰撞后会朝不同的方向移动。

它工作得很好,除非球太多,最小平移距离变得明显。它们开始大量重叠,并在底部不断地相互推挤。我增加“重力”越多,情况就越糟。对它们施加的压力增加并且它们彼此压缩/重叠的量增加。

同样,在我击中相当数量的 N 个球之前,我没有任何问题。

当前优化方法

碰撞检测 -
扫描和修剪- (又名排序和扫描)

我在我的球上使用插入排序,每个循环沿着它们的 x 轴循环。由于插入排序的性质,我可以利用模拟器的时间连贯性。逐帧,球的位置变化很小,所以排序没有太多工作要做。这将线性排序摊销运行时间带到 O(N) 或线性,而不是 O(N^2) 的平均运行时间。

由于球已排序,因此在检查碰撞之前,我在第二个循环中进行了几次预检查。现在我只需要检查彼此靠近的球(因为它们是沿 x 轴排序的),并且每当我检查一个球与另一个 xmin 大于当前球的 xmax 的球时,我都会跳出第二个循环. 所以它跳过了成千上万的检查。

当我实现这个时,它带来了巨大的速度提升。但是,我仍然希望能够处理超过 600-800 个球。我读过物理引擎可以轻松同时处理 10k 个对象之间的碰撞检测,所以我想我可以通过一些工作达到 1-2k。

运行分析器后,碰撞检测占用了我大约 55% 的时间,而渲染占用了大约 45% 的时间。所以,这是我最昂贵的两项费用。


问题:

你能想到任何更好的算法或技术让我的模拟器能够处理更多的球吗?


相关代码:

整个项目:

svn 结帐http://simucal-projects.googlecode.com/svn/ballbounce/trunk/

或者,单击此处在浏览器中手动浏览文件。

感兴趣的部分:

0 投票
6 回答
3435 浏览

physics - 如何与量子谐振子波函数进行数值积分?

如何对无限范围内的一维积分进行数值积分(使用什么数值方法,以及使用什么技巧),其中被积函数中的一个或多个函数是一维量子谐振子波函数。除其他外,我想在谐振子基础上计算某些函数的矩阵元素:

phi n (x) = N n H n (x) exp(-x 2 /2)
其中 H n (x) 是Hermite 多项式

V m,n = \int_{-infinity}^{infinity} phi m (x) V(x) phi n (x) dx

在存在宽度不同的量子谐波波函数的情况下也是如此。

问题是波函数 phi n (x) 具有振荡行为,这对于较大的n来说是个问题,并且来自 GSL(GNU 科学图书馆)的自适应 Gauss-Kronrod 正交等算法需要很长时间来计算,并且误差很大。

0 投票
5 回答
7096 浏览

java - Java中的弹跳球

这可能是一个非常基本的问题,但我似乎找不到任何其他文章。

无论如何,我已经用 Java 编写了一个小的弹跳球程序来尝试扩展我的基本技能。该程序只是一个简单的弹跳球,它会掉落并希望弹跳一段时间。原始程序运行良好,但现在我尝试在程序中添加重力。重力实际上可以正常工作一段时间,但是一旦反弹变得非常小,动画就会在很短的时间内变得不稳定,然后球的位置就会不断减小。我试图找出问题所在,但我就是看不到它。任何帮助都将受到欢迎。

}

编辑:谢谢,似乎已经对不稳定的运动进行了分类。我仍在努力寻找如何在球停止弹跳时阻止它向下移动。现在它会移动停止弹跳然后继续向下移动通过“地板”。我认为这与我的 yspeed += 重力线有关。我只是看不出我将如何停止运动。

0 投票
4 回答
2148 浏览

simulation - 您将如何使用 Box2D 物理引擎保持火车在轨道上的俯视图?

我认为使用像 Box2D 这样的物理库来模拟火车的顶视图沿着轨道、穿越开关等会很有趣。我需要什么关节和马达来完成这项工作?

我很好奇如何实现使汽车遵循样条轨道所需的力,以便它可以撞到其他火车车厢、行人、DeLoreans 等。只需对每个时间步说“汽车现在处于样条曲线(t)”会在物理引擎中产生过大的力。如果我理解正确,您必须用一种力将汽车固定在轨道上,用另一种力将其角度限制为与轨道平行(或用两种力将汽车的前部和后部固定在轨道上),然后创建另一个推动火车前进的力量。我正在寻找有关如何完成这些事情的一些细节。

0 投票
4 回答
2765 浏览

simulation - 如何计算二维表面上移动和旋转磁盘的摩擦阻力?

让我们考虑一个质量为 m 且半径为 R 的圆盘,其表面上还涉及摩擦力 u。当我们给这个圆盘一个方向上的起始速度 v 时,圆盘将朝那个方向移动并减速并停止。

如果圆盘在速度旁边有一个旋转(或旋转线垂直于表面旋转)w,那么圆盘不会在一条线上移动,而是弯曲。最后,线速度和角速度都将为 0。

如何计算这种条带/弯曲/拖动?是否可以为 X(v,w,t) 函数提供解析解,其中 X 将根据给定 t 处的初始 vw 给出磁盘的位置?

任何模拟提示也可以。我想,根据 w 和 m 以及 u,会有一个垂直于线速度的附加速度,因此磁盘的路径会从线性路径弯曲。