Buoyancy, Rigid Bodies and Water Surface

I’ve spent the last couple weeks researching eigenvalue decomposition and solving cubic polynomials in order to simulate a liquid surface and polyhedral buoyancy! I gave a lecture about this topic at my university and hope the slides can be of interest or help to someone. I’ve attached a couple demo GIFs to the bottom of this post.

Download (PDF, Unknown)




5 thoughts on “Buoyancy, Rigid Bodies and Water Surface

  1. AnonymousAndy

    Have you tried newton’s method for solving the cubic polynomial? It could be quite fast. I came up with this (without doing any testing).


    1. Randy Gaul Post author

      Hi, thanks a lot for the comment. I haven’t tried this, but am definitely going to look up the method and consider! I’m just not aware of how to solve for all the roots with Newton’s method, as you really need all three.

  2. AnonymousAndy

    mhm, after some thinking I think Cardano’s method is actually much better, because newton’s won’t easily give you multiple solutions. Also it converges a bit slow for cubic or higher order functions. Anyway i like thanks for posting these articles, good stuff.

  3. Mario

    Hi there,
    I am researching about buoyancy and I found your paper. Let me tell you that this contribution is really cool man.

    I’ve got a question regarding the computation of eigenvalues. I read in Graphics Gems that they are useful when we have distribution of particles, so how does eigenvalues and eigenvectors help us to determine the best-fit plane? Also, we should have a best-fit plane per frame right?

    I appreciate your work and I hope to hearing from you.



    1. Randy Gaul Post author

      The idea is that the covariance matrix encodes information about the sum of squares of each point. So points farther away make a greater contribution, and points closer to the origin make much smaller contributions. Eigenvectors and eigenvalues are fundamental constructs of linear algebra, so be sure to study them if you want to know more.

      So if a group of particles is shaped like a disc, the eigenvectors will be two longer vectors than span the “plane” the disc sits in, while the third vector will be pointing along the plane’s normal. In our case the particles are points on the water surface, especially ones near the rigid body that is colliding with the water.


Leave a Reply

Your email address will not be published. Required fields are marked *