/// <summary> /// /// </summary> /// <param name="x"></param> private int ParticleFlow() { Engine.Color.ColorVariance cv = new Color.ColorVariance(t_particles[0].Pixel); cv.SetFrequencies(500); cv.SetRanges(30); double life = 0; do { cv.Step(); life = 0; for (int y = 0; y < t_particles.Length; y++) { t_particles[y].Pixel = cv.ColorVariation; t_particles[y].Draw(t_imageSource); if (t_particles[y].Life < 0) { continue; } Engine.Calc.Vector pos = t_particles[y].Position; if (pos.X < 0 || pos.X >= t_imageSource.Width) { t_particles[y].Die(); life += 0; continue; } if (pos.Y < 0 || pos.Y >= t_imageSource.Height) { t_particles[y].Die(); life += 0; continue; } t_particles[y].Move(t_flowField[(int)t_particles[y].Position.X, (int)t_particles[y].Position.Y]); life += t_particles[y].Life; } } while (life > t_particleLife); return(0); }
/// <summary> /// /// </summary> private int ParticleFlow(int start, int end, Engine.Threading.ParamList lst) { Engine.Color.ColorVariance cv = new Color.ColorVariance(t_particles[0].Pixel); cv.SetFrequencies(500); cv.SetRanges(30); double life = 0; do { life = 0; for (int i = start; i < end; i++) { t_particles[i].Pixel = cv.ColorVariation; t_particles[i].Draw(t_imageProcessed); if (t_particles[i].Life < 0) { continue; } Engine.Calc.Vector pos = t_particles[i].Position; if (pos.X < 0 || pos.X >= t_imageProcessed.Width) { t_particles[i].Die(); continue; } if (pos.Y < 0 || pos.Y >= t_imageProcessed.Height) { t_particles[i].Die(); continue; } t_particles[i].Move(t_flowField[(int)t_particles[i].Position.X, (int)t_particles[i].Position.Y]); life += t_particles[i].Life; } } while (life > t_particleLife); return(0); }