# Movement of Sailboats

This topic is 3033 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## 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 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 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

where

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

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.

1. 1
Rutin
25
2. 2
3. 3
4. 4
JoeJ
18
5. 5

• 14
• 14
• 11
• 11
• 9
• ### Forum Statistics

• Total Topics
631757
• Total Posts
3002140
×

## Important Information

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!