如何计算绷紧的金属丝包裹2D对象所施加的力?


10

假设我有一个物理原语,我将其称为“导线”,包裹在2D环境中(如本问题所述)。

这是可能的样子的说明:

电线缠绕在静态和动态游戏对象上

在示例示例中:电线将盒子向上拉(固定),盒子将电线向下拉。弹簧上的物体被金属丝向下推动,但也向上推动金属丝。

虽然我还没有弄清楚如何实现它,但是假设电线可以在包裹的点上自由滑动。

在2D物理模拟(即:基于框架)中,您如何计算要施加到这样的物体上的力(或脉冲),该物体附着或缠绕在电线上?


正如我在第一个问题中提到的那样,我假设如果电线上唯一的非静态物体是末端的质量,则该力将等于质量与质量点之间的固定长度的连接点在电线上。

Answers:


9

拉动电线的盒子会对电线施加张力。张力是一种力,以牛顿为单位。如果我们做一些简化的假设(导线和环境之间没有摩擦),那么沿着导线的所有点的张力都是相同的。

如果我们认为您的示例是静态的,那么电线上的张力就是盒子的重量:

T = m * g

其中,m是盒子的质量,g是由于重力引起的加速度(即9.8 m / s ^ 2)。请注意,这仅在静态情况下有效,请参见下文,以了解如何在动态情况下进行计算。

这样,导线中每个弯曲处的力就只是张力在相关方向上的投影。例如,弹簧对象尖端的力是沿接触法线的力,其大小为:

F = T * cos(angle between wire and contact normal)

在这种情况下,接触法线方向将是线段之间角度的二等分。第二个标记点对环境的作用力无关紧要,因为它不会对张力或其他任何影响。

现在,在动态情况下,拉力只是施加在盒子上的约束力,以使其保持与电线的连接。因此,如果物理引擎是基于脉冲的,那么张力就是:

T = impulse / timestep

这也导致了将电线缠绕在环境周围的通用算法。重要的属性是导线的总长度。仅需要模拟最后一个段,可以将所有较早的段视为固定的。因此,最后一段的长度是已知的,只需从总长度中减去较早段的长度即可。然后,最后一段可以是简单的弹簧约束。然后,只要在与环境相交时分割线段,就可以在弯曲变直时将其删除。


所以-只是为了澄清一下:我将在固定长度的关节上具有自由质量,该自由质量在导线的下一个“弯曲”处附着在世界上。我发现关节在每个框架上施加于盒子的冲动是什么,从那里我可以得到金属丝上的张力?
安德鲁·罗素

另外-我很担心F = T * cos(angle between wire and spring axis)。到底是哪个角度?另外:我不认为(在模拟中)有一种明智的方法来使导线“知道”该对象上附着了弹簧。
安德鲁·罗素

@Andrew-关于您的第一点,是的,根据定义,关节在盒子上施加的力等于导线中的张力。对于第二点,您是对的,这不是很清楚,实际上是导线和接触点法线之间的角度。我已经编辑了答案,以使其更清楚。
Niall

4

我非常感谢您对这些基于电线的线程感到沮丧,这是一个很难解决的问题。我们从来没有使碰撞完美地进行,但是约束模拟绝对是可行且直接的。

导线约束实际上与常规距离约束几乎相同。对于具有n个线段的导线,您没有n + 1个约束点,而是有一个n + 1个线段,每个顶点有一个n + 1点–在端点处,雅可比行列式等于距离约束(即,类似于d / | d |,其中d是矢量对于内部节点,雅可比行列式类似于(a / | a |-b / | b |),其中a和b是从节点到相邻节点的向量。(对不起,我碰到这已经有几年了...)

您不能伪装为“只有最后一段是动态的”,因为在您的示例中,对象可以与其他段进行交互,但是您只需要在绳索的末端模拟质量-在内部绳索可以无质量。需要将在每个节点上计算出的约束冲激应用于在该节点上碰撞的对象。

以下是一些相关论文:

前三个相对较新,应该会有所帮助。底页的第75页描述了一个“多栏”约束,它实际上是一条导线。

祝好运 :)

雷甘


0

基本思想是绳索的长度保持不变。如果将其向上推,则需要在此处创建一个“分割点”。然后,绳索将确定它的连接方向,因为它无法在该方向上“生长”。因为它连接到右侧的某物,所以左侧的那根绳子会变短,并且分离点和连接点之间的那根绳子会变得稍长。然后,像Niall所说的那样,计算线的张力。我要怎么做是计算每根“绳子”的张力。然后,您可以使用它来确定所涉及的力量。

希望这可以帮助。


不太对不起。
安德鲁·罗素
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.