Figuring out what parameters to use is the hard part.
One issue that I ran into last time is the fact that if wind starts going in the same direction from a bunch of sources, simple vector addition can add up fast.
That's because I've been treating my wind collisions as elastic collisions. There are two major kinds: elastic and inelastic. In an elastic collision, no energy is lost to heat, etc. So two (or more) winds enter a hex, one wind leaves. The following formula is used:
\[m_0 v_0 + m_1 v_1 + \cdots + m_n v_n = m_f v_f\]
This is essentially what we've been doing, in two dimensions, treating all masses as equal (even the final mass). Because I'm ignoring masses, this isn't really a physically correct description of an elastic collision.
The other option is inelastic. I think this is better, because we can think of the input winds "sticking" together into a new mass of air. This is not how fluids really mix, however, but it will be good enough. This formula is (ignoring masses again):
\[v_f = {v_0 + v_1 + \cdots + v_n \over n}\]
Which is simply the average.
So let's try a few combos of parameters. \[g\] is the ratio of decrease between each successive push, and \[z\] is the slope change (in feet) at which the wind is deflected by 45 degrees.
g=0.7, z=5000, elastic |
g=0.7, z=5000, inelastic |
g=0.7, z=2500, inelastic |
g=0.8, z=2500, inelastic |
g=0.9, z=2500, inelastic |
g=0.99, z=2500, inelastic |
Also, I need to develop some better representation for topography. The heightmap is huge overkill here, but its difficult to see the effect of altitude when height is not shown at all. Something for a rainy day (of which there are many upcoming).
I have done lots of tuning to get "reasonable" results. I'm doing perfectly elastic collisions as well. Perhaps I should try using inelastic collisions (or some mix).
ReplyDeleteYou alluded to this in your most recent post, but full continent scale is difficult for elastic collision, I've found. It tends to grow exponentially in wind tunnels, I think. But yea, tuning is a bitch.
Delete