Sign in to follow this  

Movement of Sailboats

Recommended Posts

Hallo, I would like to simulate the movement of a sailboat in 2D from the following:
  • wind including direction and velocity
  • position of helm
  • position of sail
  • mass of boat
  • shape of boat
Do I need more? Where would I find the needed equations? Would a 2D physics engine help here or not?

Share this post

Link to post
Share on other sites
Well, it's pretty complex!

There are lots of interactions between the hull and water, the keel, the mainsail, the headsail (spinnaker?), heeling, weight distribution, the direction of the wind relative to the sail, the position mast, the orientation of the sail relative to the boat, relative to the wind, rudder, the direction of the water current...

Not sure where I'd start to simplify things.

Share this post

Link to post
Share on other sites
For a simple model, you could take the relative wind velocity (that it's relative to the boat's is important) and reflect it off of the sail (treated as a flat plate). The change of momentum of the air is precisely twice the component of the relative velocity along the sail's normal. Now assuming no sideslip (possibly a bad assumption, but let's go with it for now; we've got an infinitely-good keel), the net force exerted on the boat is just the projection of this vector onto the boat's heading vector.

To summarize, I guess what I'm saying is,

F_net = <2 <v_wind - v_boat, n_sail> n_sail, u_heading> u_heading
= 2 <v_wind - v_boat, n_sail> <n_sail, u_heading> u_heading


v_wind = wind velocity vector
v_boat = boat velocity vector
n_sail = sail unit normal
u_heading = unit boat heading vector

and the angle brackets denote inner products.

I've left out an air density factor in here, but since this is a game and you'll be tuning constants anyway it doesn't really matter.

Now about the "no sideslip" assumption... in fact, the keel only generates side force when the boat is moving. So perhaps you could actually use,

F_net = 2 <v_wind - v_boat, n_sail> <n_sail, u_heading> u_heading +
g(<v_boat, u_heading>) <v_wind - v_boat, n_sail> <n_sail, u_right> u_right

where u_right is the boat's right (or should I say starbord?) vector, and g is some decreasing function which rapidly decays to zero, e.g. g(x) = exp(-gamma x), where gamma is some positive constant. But now I'm just making stuff up.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this