User:Evil4Zerggin/Effective position drag model

From From the Depths Wiki
Jump to: navigation, search

The idea is to have an easily invertible function that maps the effective position---where the projectile would be if there were no drag---to the actual position of the projectile. Then to hit a target point, we simply invert the target coordinates and aim at that point instead.

Basics[edit | edit source]

Let the function that maps the effective position of the projectile to the actual position be

f \left( x_e, y_e \right) \longleftrightarrow x, y

The trajectory of a dragless projectile is

x_e \left( t \right) = v_{x0} t

y_e \left( t \right) = v_{y0} t - \frac{1}{2} g t^2

The trajectory of the projectile after drag is then

f \left( v_{x0} t, v_{y0} t - \frac{1}{2} g t^2 \right)

To hit a point x, y, we instead aim at

f^{-1} \left(x, y\right) \rightarrow x_e, y_e

as if there were no drag.

Choosing the function[edit | edit source]

Of course, \mathbb{R}^2 \rightarrow \mathbb{R}^2 is a very large space. Let us see what sort of functions might be appropriate.

  • f should be continuous.
  • f doesn't necessarily have to be onto---it's fine if shells can't reach some parts of the world. But it should probably be one-to-one, as otherwise we will almost certainly suffer discontinuities in the inverse.
  • One possibility for simplification is making f depend on and/or affect only the distance from the origin. However, this could cause some strange trajectories with high-angle fire.
  • Another is to separate the x and y directions so that x = f_x \left(x_e\right) and y = f_y \left(y_e\right).
  • In fact, we may even consider dispensing with modifying y at all, in which case y_e = y, x = f_x \left(x_e, y \right), and x_e = f_x^{-1} \left(x, y \right).
  • f could of course also depend on fixed properties of the projectile.
  • f should map the origin to the origin, and we should have \frac{df_x}{dx} = \frac{df_y}{dy} = 1 (no scaling near the origin).

Some x-only possibilities[edit | edit source]

  • f_x \left( x_e \right) = R \left(1 - e^{-x / R} \right) for some maximum horizontal range parameter R. This corresponds to linear drag in the horizontal axis only.
  • f_x \left( x_e \right) = R \ln \left(1 + x / R \right). This corresponds to quadratic drag in the horizontal axis only.

Other considerations[edit | edit source]

  • At the least additional work would be needed to deal with inherited velocity.
  • Affecting only the horizontal axis will cause shells to plunge pretty heavily at the end. Though maybe that could be a feature. On the other hand, if they keep their vertical velocity in space, they will tend to curve upwards...