summaryrefslogtreecommitdiff
path: root/2d/softbody/softbody_1/undamped.cpp
diff options
context:
space:
mode:
authormattkae <mattkae@protonmail.com>2022-02-26 20:08:53 -0500
committermattkae <mattkae@protonmail.com>2022-02-26 20:08:53 -0500
commit38d89c1182a61ca4e024e0834ae9187db76c67f8 (patch)
treeeeb0cdabac28a0eed05d090c85028933a4645c7a /2d/softbody/softbody_1/undamped.cpp
parent8d4c5116719825dce6222c494cd384fe1df775de (diff)
Fixing spring simulations and some write ups
Diffstat (limited to '2d/softbody/softbody_1/undamped.cpp')
-rw-r--r--2d/softbody/softbody_1/undamped.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/2d/softbody/softbody_1/undamped.cpp b/2d/softbody/softbody_1/undamped.cpp
index 68e0636..578a126 100644
--- a/2d/softbody/softbody_1/undamped.cpp
+++ b/2d/softbody/softbody_1/undamped.cpp
@@ -150,9 +150,9 @@ namespace Undamped {
void Spring::load(Renderer2d* renderer, SpringWeight* inWeight, float32 length, float32 initialDisplacement, float32 inK, float32 loopRadius) {
weight = inWeight;
- position = initialDisplacement;
+ position = -initialDisplacement;
k = inK;
- force = -k * initialDisplacement;
+ force = -k * position;
velocity = sqrtf(k / weight->mass);
const int32 verticesPerSegment = 6;
@@ -198,7 +198,8 @@ namespace Undamped {
void Spring::update(float32 dtSeconds) {
float32 lastPosition = position;
force = -k * position;
- velocity = velocity + (force * dtSeconds) / weight->mass;
+ auto acceleration = (force / weight->mass);
+ velocity = velocity + acceleration * dtSeconds;
position = position + velocity * dtSeconds;
float32 dx = position - lastPosition;