[ay原創做品]用wpf寫了個模仿36Kr網站登陸背景的效果

這裏我借鑑了,上週比較火的一個前端文章,人家用js去寫的,地址 本身用wpf也寫了一個,可是它的  粒子比較,而後連線算法真的不好,他建立了一個加入鼠標點的集合,2個集合進行比較,而且粒子會向鼠標靠近,這個存在很嚴重問題,若是你真心看了就知道了,粒子吸的太多了,就卡了,而我本身研究只用了一個集合,算法用的高中知識,排列組合的組合知識,   不考慮順序的比較。固然個人效果跟他不同,性能比他好多了。html

不要說wpf,微軟不維護啥的,只是你玩的時間很少,你不會玩而已。用點心,事情就成了,ay來教你前端

效果exe體驗: 下載算法

1靜態效果圖性能

QQ圖片20151118085735.png

 

2動態的spa

QQ圖片20151118085740.gif

總體實現思路,講解:.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次,減小次數。

 因爲博客園的關係,我發誓再也不用博客園了,不會再分享,謝謝了,拿到代碼的同志,謝謝支持大家的支持了

固然若是你聰明,憑藉我上面給的思路和代碼,你已經可以寫出來了,若是須要源碼,對不起了,博客園作的事情,我太憤怒,沒了

 


2015年11月18日 ===== AYUI       www.ayjs.net      AY         楊洋原創編寫,請不要轉載謝謝=======

相關文章
相關標籤/搜索