Ejemplo n.º 1
0
        private double wave(int x, int y, PlasmaParam plasmaParam)
        {
            double ret = 0;

            foreach (Func <double, double, double, double, double> func in plasmaParam.m)
            {
                ret += plasmaParam.f.Invoke(Math.Floor(
                                                func.Invoke(x + plasmaParam.vx * t, y + plasmaParam.vy * t, plasmaParam.x,
                                                            plasmaParam.y) * plasmaParam.d + (plasmaParam.p * t))) / (plasmaParam.m.Count);
            }

            return(ret);
        }
Ejemplo n.º 2
0
        public LEDPlasmaModule(ModuleConfiguration moduleConfiguration) : base(moduleConfiguration)
        {
            Random random = new Random();
            List <Func <double, double, double, double, double> > worklist =
                new List <Func <double, double, double, double, double> >();


            if (!string.IsNullOrEmpty(moduleConfiguration.Parameter))
            {
                List <int> functionIds = moduleConfiguration.Parameter.Split(',').Select(int.Parse).ToList();
                functionIds.ForEach(c => worklist.Add(functions[c]));
            }
            else
            {
                worklist.Add(functions[0]);
            }

            param = new PlasmaParam()
            {
                pt = random.NextDouble() + random.Next(23), //23,// random.Next(23) * 5,
                vx = random.NextDouble() * 8 - 4,           //0.5,
                vy = random.NextDouble() * 8 - 4,           //0.35,
                d  = random.NextDouble() * 4 + 2,           //5,
                m  = worklist,
                f  = sine,
                a  = 1,
                b  = 1,
                x  = 1,
                y  = 0,
                p  = 3
            };

            Debug.WriteLine("pt: " + param.pt + ", vx: " + param.vx + ", vy: " + param.vy + ", d: " + param.d);

            if (sineTable.Count == 0)
            {
                for (int i = 0; i < 256; i++)
                {
                    sineTable.Add(Math.Round(((Math.Sin(i * 2 * Math.PI / 255) * 255) + 255) / 2));
                }
            }
        }