Пример #1
0
        private void StartArrayUpdate()
        {
            Task.Factory.StartNew(() =>
            {
                // Create the random directions
                var rnd             = random.Value;
                Vector[] directions = Enumerable.Range(0, _pointCount).Select(i =>
                {
                    var angle   = rnd.NextDouble() * Math.PI * 2;
                    Vector dxdy = new Vector(Math.Sin(angle), Math.Cos(angle));
                    return(dxdy);
                }).ToArray();

                while (!_hasBeenDisposed)
                {
                    if (_doReset)
                    {
                        DoReset();
                        _doReset = false;
                    }
                    if (_animationRunning)
                    {
                        var positions = Positions as DxInstancedPointAndColor[];
                        for (int i = 0; i < _pointCount; ++i)
                        {
                            var dxdy = new Vector(directions[i].X * Width1Px, directions[i].Y * Height1Px);
                            var newX = dxdy.X + positions[i].X;
                            var newY = dxdy.Y + positions[i].Y;
                            if (newX < 0 || newX > 1)
                            {
                                newX          = Math.Min(1, Math.Max(0, newX));
                                directions[i] = new Vector(-directions[i].X, directions[i].Y);
                            }
                            if (newY < 0 || newY > 1)
                            {
                                newY          = Math.Min(1, Math.Max(0, newY));
                                directions[i] = new Vector(directions[i].X, -directions[i].Y);
                            }

                            _currentArray[i] = new DxInstancedPointAndColor(newX, newY, positions[i].Color);
                        }
                        var temp  = (Positions as DxInstancedPointAndColor[]) ?? new DxInstancedPointAndColor[_pointCount];
                        Positions = _currentArray;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Positions)));
                        _currentArray = temp;
                    }
                    Thread.Sleep(10);
                }
            });
        }
Пример #2
0
        private void DoReset()
        {
            var        rnd     = random.Value;
            HSBPalette palette = new HSBPalette();

            for (int i = 0; i < _pointCount; i++)
            {
                var point  = new Point(rnd.NextDouble(), rnd.NextDouble());
                var length = Math.Sqrt(point.X * point.X + point.Y * point.Y) / Math.Sqrt(2);
                var color  = palette.GetColor(length);
                _currentArray[i] = new DxInstancedPointAndColor(point, color);
            }
            var temp = (Positions as DxInstancedPointAndColor[]) ?? new DxInstancedPointAndColor[_pointCount];

            Positions = _currentArray;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Positions)));
            _currentArray = temp;
        }