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);
        }
예제 #5
0
 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;
 }
예제 #6
0
 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;
 }