Freigeben über


Управление гравитацией

Ребята из BoneSoft выложили на CodeProject небольшую интересную программу моделирования некоторых физических законов на C#. Пример снабжен подробным описанием.

Вот их реализация общего цикла вычислений:

    1: foreach (Particle p in particles) {
    2:     ...
    3:     if (particles.Count > 1) { 
    4:         Vector a = new Vector();
    5:         foreach (Particle p2 in particles) {
    6:             if (object.ReferenceEquals(p, p2)) { continue; }
    7:             Vector unit = p2.Location - p.Location;
    8:             float magnitude = (float)Math.Sqrt(
    9:                 (unit.X * unit.X)
   10:                 + (unit.Y * unit.Y)
   11:                 + (unit.Z * unit.Z));
   12:             float factor = (GravitationalConstant * (
   13:                 (p.Mass * p2.Mass) / (magnitude * magnitude * magnitude)
   14:             )) / p.Mass;
   15:             unit *= factor;
   16:             a += unit;
   17:         }
   18:         p.Velocity += a;
   19:     }
   20:     ...
   21: }

Беглого взгляда на программу достаточно, чтобы утверждать: с расширениями .Net для параллельного программирования (EN) она способна на большее.