public Vector2 GetSpeed(Molecula molecula, Vector2 force, double seconds) { var x = GetSpeedAxis(force.X, molecula.Speed.X, molecula.Massa, seconds); var y = GetSpeedAxis(force.Y, molecula.Speed.Y, molecula.Massa, seconds); return new Vector2(x, y); }
static void Main(string[] args) { MyConsole.WriteLine("Hello World"); const int threadCount = 4; const int width = 1000; const int height = 1000; const int moleculaCount = 10000; var time = TimeSpan.FromSeconds(0.01); var random = new Random(); var forceCalculatingService = new ForceCalculatingService(); var moleculasUpdatingService = new MoleculasUpdatingService(); var factory = new ForceStategyFactory(); var moleculasA = new Molecula[moleculaCount]; var moleculasB = new Molecula[moleculaCount]; for (int i = 0; i < moleculaCount; i++) { int x = random.Next(width); int y = random.Next(height); var moleculaA = new Molecula(null); var moleculaB = new Molecula(null); moleculaA.Position = new Vector2(x, y); moleculaB.Position = new Vector2(x, y); moleculasA[i] = moleculaA; moleculasB[i] = moleculaB; } var strategies = new BaseForceStrategy[] { factory.GetBasicForceStrategy(moleculasA, forceCalculatingService, moleculasUpdatingService), factory.GetParallelForceStratagy(moleculasB, forceCalculatingService, moleculasUpdatingService, threadCount) }; foreach (var strategy in strategies) { strategy.Time = time; strategy.Height = height; strategy.Width = width; } do { var benchmark = new Benchmark<object>(strategies); if (!benchmark.StartBenchmark().IsBechmarkSuccessful) { break; } MyConsole.WriteLine(); } while (true); MyConsole.WriteLine("Tests finished!! Press enter"); MyConsole.ReadLine(); }
public Vector2 GetMovingOffset(Molecula molecula, Vector2 force, double seconds) { var oldSpeed = molecula.Speed; var x = GetMovingAxis(force.X, oldSpeed.X, molecula.Massa, seconds) * (1f - SlowingPercent); var y = GetMovingAxis(force.Y, oldSpeed.Y, molecula.Massa, seconds) * (1f - SlowingPercent); return new Vector2(x, y); }
public Vector2 GetForce(Molecula moleculaA, Molecula moleculaB) { var vector = (moleculaA.Position - moleculaB.Position); var length = Math.Max(vector.Length(), 1f); var force = GetForce(moleculaA.Massa, moleculaB.Massa, length); var forceX = -vector.X*force/length; var forceY = -vector.Y*force/length; return new Vector2(forceX, forceY); }
private Molecula[] CreateMoleculas(int count) { var moleculas = new Molecula[count]; var colors = new Color[] {Color.White, Color.Red, Color.Blue, Color.Yellow, Color.Black, Color.Brown, Color.Cyan}; for (int i = 0; i < count; i++) { var molecula = CreateMolecula(colors[i%colors.Length]); moleculas[i] = molecula; } return moleculas; }
private Molecula CreateMolecula(Color color) { var size = Size; var molecula = new Molecula(this); molecula.Color = color; molecula.Position = new Vector2(_random.Next(size.Width), _random.Next(size.Height)); return molecula; }