欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# Winform實(shí)現(xiàn)波浪滾動(dòng)效果

 更新時(shí)間:2020年11月26日 11:06:21   作者:四原色  
這篇文章主要為大家詳細(xì)介紹了C# Winform實(shí)現(xiàn)波浪滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C# Winform實(shí)現(xiàn)波浪滾動(dòng)效果的具體代碼,供大家參考,具體內(nèi)容如下

設(shè)計(jì)思路

1、首先,理解一個(gè)概念:正弦波,余弦波。相信接受過(guò)九年義務(wù)教育的同志都清楚,
聽(tīng)說(shuō)某華大學(xué)的高材生表示小學(xué)一年級(jí)就會(huì)計(jì)算三角函數(shù),~~~~。

2、本人使用的是C#實(shí)現(xiàn)的,至于有人說(shuō)JAVA效率更高,那也可以使用JAVA,只要原理清晰就ok.

3、礙于本人算法技術(shù)的局限,最終產(chǎn)生的效果并不是最優(yōu)解,人山人海的CSDN里希望能有讀者看完我的見(jiàn)解后能提出更好的算法思想!:)

4、既然是平面運(yùn)動(dòng),我們先從具體的點(diǎn)說(shuō)起:

(1)每一個(gè)點(diǎn)都是按照規(guī)則的圓周軌跡運(yùn)動(dòng)的,其次每一次變化每個(gè)點(diǎn)的橫坐標(biāo)位置根據(jù)sin()函數(shù)計(jì)算,縱坐標(biāo)根據(jù)cos()函數(shù)計(jì)算。
(2)對(duì)于每一列的點(diǎn),他們的橫坐標(biāo)根據(jù)M(對(duì)應(yīng)代碼中的double型變量M值,代表圓周運(yùn)動(dòng)的角度,以下m同理)的值來(lái)依次偏移,
(3)對(duì)于每一行的點(diǎn) ,他們的縱坐標(biāo)根據(jù)m(對(duì)應(yīng)代碼中的double型變量m值)的值來(lái)依次偏移,

5、嘗試過(guò)程有:

【1】、對(duì)單個(gè)點(diǎn)的橫縱坐標(biāo)均不設(shè)置偏移,效果入圖:

【2】、僅對(duì)縱坐標(biāo)設(shè)置偏移的效果:

【3】、橫縱坐標(biāo)都設(shè)置偏移的效果見(jiàn)下面的設(shè)計(jì)效果。

設(shè)計(jì)效果

具體代碼

不想寫(xiě)注釋?zhuān)吘勾a量少。
但是還是想說(shuō)明一下,記得添加一個(gè)Timer控件,具體的Interval值自己設(shè)置,這里設(shè)置的是10,值越小,波浪滾得越劇烈。

private void Form1_Load(object sender, EventArgs e)
  {
   g = this.CreateGraphics();
   g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
   g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
   g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;

   timer1.Start();
  }
  Graphics g;
  double step1 = 0.0;

  private void drup(Point star,ref double step)
  {
   double m = 0.0;
   double s = 0.0;
   for (int i = 0; i < 10; i++)
   {
    double M = s;
    for (int j = 0; j < 10; j++)
    {
     int X = (int)(star.X + i * 30 - 25 * Math.Sin(step - 0.16 + M));
     int Y = (int)(star.Y + j * 30 - 25 * Math.Cos(step+m-0.16));
     g.FillEllipse(new SolidBrush(this.BackColor), new Rectangle(new Point(X - 1, Y - 1), new Size(6, 6)));
     int x = (int)(star.X + i * 30 - 25 * Math.Sin(step+M));
     int y = (int)(star.Y + j * 30 - 25 * Math.Cos(step+m));
     g.FillEllipse(new SolidBrush(Color.White), new Rectangle(new Point(x, y), new Size(4, 4)));//this.Width /2 -300 + i * 20, this.Height / 2 - 300 + j * 20
     M += Math.PI / 12;
     if (j == 1)
      s = M;
    }
    m += Math.PI / 8;
   }
   step += 0.16;
  }
  private void timer1_Tick(object sender, EventArgs e)
  {
   drup(new Point(this.Width / 2 - 100, this.Height / 2 -100),ref step1);
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論