这里我借鉴了,上周比较火的一个前端文章,人家用js去写的,地址 本身用wpf也写了一个,可是它的 粒子比较,而后连线算法真的不好,他建立了一个加入鼠标点的集合,2个集合进行比较,而且粒子会向鼠标靠近,这个存在很严重问题,若是你真心看了就知道了,粒子吸的太多了,就卡了,而我本身研究只用了一个集合,算法用的高中知识,排列组合的组合知识, 不考虑顺序的比较。固然个人效果跟他不同,性能比他好多了。html
不要说wpf,微软不维护啥的,只是你玩的时间很少,你不会玩而已。用点心,事情就成了,ay来教你前端
效果exe体验: 下载算法
1静态效果图性能
2动态的spa
总体实现思路,讲解:.net
先设计个类,用于粒子,在wpf中我用Ellipse去画点,用line画连线设计
粒子的几个属性,位置 x,y 两个方向的加速度 xa,ya,还有个距离属性maxorm
/// <summary> /// 粒子类 /// </summary> public class GrainBase { public double? x { get; set; } public double? y { get; set; } public double xa { get; set; } public double ya { get; set; } public double max { get; set; } }
第一步作出游离的ellipse htm
随机生成,x,y,xa和ya速度blog
//// 添加粒子 //// x,y为粒子坐标,xa, ya为粒子xy轴加速度,max为连线的最大距离 for (int i = 0; i <100; i++) { GrainBase gb = new GrainBase(); gb.x = rand.NextDouble() * Cav.ActualWidth; gb.y = rand.NextDouble() * Cav.ActualHeight; gb.xa = rand.NextDouble() * 2 - 1; gb.ya = rand.NextDouble() * 2 - 1; gb.max = 8000; grains.Add(gb); }
第二步写出算法 计算两点距离,而后比较,是否须要line
这里就须要定时器去不断的刷新了,这里1秒 60帧,一秒60次 DrawingAy方法
updateTimer = new System.Windows.Threading.DispatcherTimer(); updateTimer.Tick += new EventHandler(DrawingAY); updateTimer.Interval = new TimeSpan(0, 0, 0, 0, 1000 / 60); updateTimer.Start();
而后线的 宽度和颜色,透明度,根据距离比设定
全部的点都要比较,那么我用了相似 排列组合的算法中的 组合,不考虑顺序,两两比较,好比 123,三个粒子,就比较 1和2,1和3, 2和3,3次,减小次数。
因为博客园的关系,我发誓再也不用博客园了,不会再分享,谢谢了,拿到代码的同志,谢谢支持大家的支持了
固然若是你聪明,凭借我上面给的思路和代码,你已经可以写出来了,若是须要源码,对不起了,博客园作的事情,我太愤怒,没了