Überlappende Minenfelder explodieren

Im 1:1-Fall, wenn also zwei gegnerische Minenfelder überlappen, wird folgende Formel benutzt:

Mines_exploding =
   Min(Units_1, Units_2)
                     ...if Dist = 0
   Units_1           ...if A < 0
   Units_2           ...if A > D
   Units_1 - A^2     ...otherwise
   ...with
      D = Distance between minefield centers
      A = (Units_1 - Units_2 + D^2) / (2*D)
      Units_1, Units_2 =
          Number of mine units contained in both fields

Diese Formel wird verwendet, wenn AlternativeMinesDestroyMines eingeschaltet ist und ein gelegtes oder vergrößertes Minenfeld ein anderes überlappt.

During the Mines destroy Mines stage of host processing, PHost uses more complicated formulas. The basic ideas are the following: a minefield that overlaps N hostile minefields shrinks at a speed of N minefield units per time unit. For each minefield pair, we can therefore compute the time until the overlap is gone. PHost now computes the minimum such time, and removes N * Time units from all minefields. At least one overlap is gone now. All the speeds are now recomputed, and the algorithm restarts if overlaps remain.

Time_until_overlap_gone =
   Min(U1 / S1, U2 / S2)
                     ...if D=0
                        (i.e. concentric minefields)
   U1 / S1           ...if U2*S1 - U1*S2 ≥ D^2 * S1
                        (i.e. field 2 eliminates field 1 completely)
   U2 / S2           ...if U1*S2 - U2*S1 ≥ D^2 * S2
                        (i.e. field 1 eliminates field 2 completely)
   (U1 - A^2) / S1   ...if S1 = S2
   ((U1-U2-D^2)*S1 - (U1-U2+D^2)*S2 + 2*Sqrt(D^2 * (U2*S1^2 - (U1+U2-D^2)*S1*S2 + U1*S2^2)))
     / (S1 - S2)^2   ...otherwise
   ...with
      D = Distance between minefield centers
      A = (U1 - U2 + D^2) / (2*D)
      U1,U2 = Mine units in both fields (Units_1, Units_2)
      S1,S2 = Shrink speeds, i.e. overlap counts for both fields

Die überwältigende letzte Formel ist die Lösung zu Sqrt(U1 - S1*x) + Sqrt(U2 - S2*x) = D und wurde mit Mathematica ermittelt.

Der tatsächlich verwendete Programmcode ist stark auf Geschwindigkeit optimiert. Außerdem wird, um Fortschritt garantieren zu können, die Zeit immer um mindestens eine ganze Einheit fortgeschrieben. Dadurch kann es passieren, dass ein Minenfeld eine Handvoll Einheiten mehr verliert, als zur Entfernung aller Überlappungen nötig gewesen wäre.

This is a testing version.
It may be incomplete, and have more bugs (or features) than the public live version at planetscentral.com.