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); }
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)); } } }