3 ms·
It's way off. My first guess was that there was something wrong with the physics code, but after carefully checking against this[1] derivation of the Hamiltonia
by magicalhippo 1y ago
It's way off. My first guess was that there was something wrong with the physics code, but after carefully checking against this[1] derivation of the Hamiltonian it seemed fine, and once I wrapped my head around the JavaScript the RK4 integration[2] checked out as well.
So, what else might be wrong I wondered. Well, it seems to move in the wrong direction... so I checked how the pendulum is displayed. And sure enough, I think there's a sign error:
getUpperBob() {
const { x0, y0, ang0, l0 } = this;
const { x, y } = this.calculateBobPosition(x0, y0, ang0, l0);
return { x, y };
}
getLowerBob() {
const upperBobPos = this.getUpperBob();
const { ang1, l1 } = this;
const { x, y } = this.calculateBobPosition(
upperBobPos.x,
upperBobPos.y,
-ang1,
l1
);
return { x, y };
}
Note how the upper bob uses ang0 while the lower one has -ang1. Meanwhile the physics derivation assumes both angles are against the vertical, so have same sign.
Changing -ang1 to ang1 does indeed make the pendulum move in a natural way, except now dragging it is flipped. Ie you drag it left and it moves right. Another sign error in setLowerBobPos. Fixing that as well it now works as I'd expect.
[1]: https://dassencio.org/46 https://dassencio.org/46
[2]: https://lpsa.swarthmore.edu/NumInt/NumIntFourth.html##section3 https://lpsa.swarthmore.edu/NumInt/NumIntFourth.html##sectio...
- Evidlo 1y agoJust made a PR
- magicalhippo 1y agoI considered it, but had to go to work and I figured since the last commit was over 4 years ago it might just sit there idly, so I skipped it. But no, PR was merged in short order. Lesson learned.
- cabirum 1y agoHn shows this story is 3 hours old, yet your GitHub PR was made 2 days ago, linking here?
- pansa2 1y agoThe story has been reposted to HN via the “second-chance pool”, which resets the dates. https://news.ycombinator.com/item?id=26998308 https://news.ycombinator.com/item?id=26998308