This week in Nature Of Code, we were asked to use the Box2D library to implement a model of some real world phenomena. Box2D is a physics system that manages the physics of a given system, which you can add various physical "bodies" to. This allows you to create a realistic physics model for a given 2D system with very little coding overhead. For whatever reason, when I heard this, my mind immediately went to popcorn.
For a smaller number (100) of kernels, my model (with a small amount of tweaking) actually works quite well. The kernels pop somewhat naturally, and the system generally handles the physics of the situation how you would expect it might: just like a real popcorn popper! You can see the effect of 100 kernels in the first two illustrations of this post.
However, from there I started adding more kernels, and got into some trouble. At 150 kernels (above) the physics started behaving a bit erratically, and areas with a lot of popping density would cause kernels to move through solid objects.
When I increased the number of kernels even further, to 300, this behavior became almost ubiquitous in the system. Kernels were popping out of the kettle left and right, and the walls of the kettle seemed almost meaningless.
I have yet to discover what the cause of this behavior is, but my guess is that it's an inability of Box2D to handle the sudden transition from kernel to popped kernel. A few ideas I've had include increasing the time of the "pop" from one step of the physics engine to say, 3 or 4. This might allow the engine to handle the change more intuitively.
One of the challenges of Box 2D is that it has no graphical output, so everything you draw is based upon a Box2D object, but isn't actually a Box2D object. What this means is that errors in one's graphics code can appear to be Box2D errors, when in fact they are coding errors on the users end. This is unquestionably one of the downsides of using a "black box" engine, but hardly enough of a problem to avoid using such a versatile tool.
source: Popcorn Model
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment