這里我借鑒了,上周比較火的一個前端文章,人家用js去寫的,地址 自己用wpf也寫了一個,但是它的 粒子比較,然后連線算法真的很差,他創建了一個加入鼠標點的集合,2個集合進行比較,並且粒子會向鼠標靠近,這個存在很嚴重問題,如果你真心看了就知道了,粒子吸的太多了,就卡了,而我自己研究只用了一個集合,算法用的高中知識,排列組合的組合知識, 不考慮順序的比較。當然我的效果跟他不一樣,性能比他好多了。
不要說wpf,微軟不維護啥的,只是你玩的時間不多,你不會玩而已。用點心,事情就成了,ay來教你
效果exe體驗: 下載

1靜態效果圖

2動態的

整體實現思路,講解:
先設計個類,用於粒子,在wpf中我用Ellipse去畫點,用line畫連線
粒子的幾個屬性,位置 x,y 兩個方向的加速度 xa,ya,還有個距離屬性max
/// <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
隨機生成,x,y,xa和ya速度
//// 添加粒子
//// 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次,減少次數。
由於博客園的關系,我發誓不再用博客園了,不會再分享,謝謝了,拿到代碼的同志,謝謝支持你們的支持了

當然如果你聰明,憑借我上面給的思路和代碼,你已經能夠寫出來了,如果需要源碼,對不起了,博客園做的事情,我太憤怒,沒了
