Управление гравитацией
Ребята из 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) она способна на большее.