我在Javascript中实现了弹簧物理,其灵感来自this blog post。我的系统使用胡克定律的公式来计算弹簧力:Javascript弹簧物理:将方向矢量应用于弹簧
F = -k(|x|-d)(x/|x|) - bv
我做a CodePen显示两点之间的弹簧的实施。 CodePen有两个点通过弹簧连接,每2秒钟点位置随机化。你可以看到弹簧上的点相互反弹。
如果你看看源代码,你可以看到,我定义为我的春天的方向向量:
var spring = {
length: 100,
direction: {
x: 1, y: 1
}
};
我试图让这个春天总是在这个“做出决议”方向。换句话说,我希望春天总是“向上”,向右。如果这是在CodePen中实现的,则意味着点的静止方向将始终是左下角的绿色点,右上角的蓝色点是。无论从哪点开始,他们应该取向为结束(它的方向向量匹配):
我试着通过弹簧矢量法线乘以:
norm1 = multiplyVectors(normalize(sub1), spring.direction),
但是这是一个noop因为向量是(1,1)
。我已经在这个系统上进行了几天的黑客攻击,并且我被卡住了。我怎样才能将我的2D弹簧限制在特定的方向?
我想出了这样的东西......基本上有两个弹簧:一个在y(侧向弯曲)和一个在x上,其中x/y系统旋转以匹配弹簧的法线。独立应用这些力,看看会发生什么。这意味着你需要另一个'k'来进行侧身弯曲,但我认为这很合理。 –
在两个弹簧总是以直角连接?这是一个有趣的想法,但它可能(我不确定)与角度上的弹簧根本不同。例如,向上向右伸出一块木块的弹簧与向右伸出的弹簧相连接的弹簧不同,弹簧直接向上弹起 –