C# Winform實(shí)現(xiàn)波浪滾動(dòng)效果
本文實(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í)有所幫助,也希望大家多多支持腳本之家。
- C# winform點(diǎn)擊生成二維碼實(shí)例代碼
- 新手小白用C# winform 讀取Excel表的實(shí)現(xiàn)
- C# WinForm狀態(tài)欄實(shí)時(shí)顯示當(dāng)前時(shí)間(窗體狀態(tài)欄StatusStrip示例)
- C# 使用Winform 獲取下拉框 選中的值
- C#-WinForm跨線程修改UI界面的示例
- Winform 實(shí)現(xiàn)進(jìn)度條彈窗和任務(wù)控制
- c# winform 解決PictureBox 無(wú)法打印全部圖片的問(wèn)題
- C# winform中窗口關(guān)閉按鈕的隱藏與禁用詳解
- C# WinForm-Timer控件的使用
- C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字的效果實(shí)例
- winform 調(diào)用攝像頭掃碼識(shí)別二維碼的實(shí)現(xiàn)步驟
相關(guān)文章
C# 并行和多線程編程——Task進(jìn)階知識(shí)
這篇文章主要介紹了C# 并行和多線程編程——Task進(jìn)階知識(shí)的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02WPF中不規(guī)則窗體與WindowsFormsHost控件兼容問(wèn)題的解決方法
這篇文章主要介紹了WPF中不規(guī)則窗體與WindowsFormsHost控件兼容問(wèn)題的解決方法,對(duì)比以往的解決方案,給出了一個(gè)具有普遍性的技巧,具有一定的借鑒價(jià)值,需要的朋友可以參考下2014-11-11C# 進(jìn)行圖片壓縮的示例代碼(對(duì)jpg壓縮效果最好)
這篇文章主要介紹了C# 進(jìn)行圖片壓縮的示例代碼,幫助大家更好的利用c# 處理圖片,提高辦公效率,感興趣的朋友可以了解下2020-11-11C#中判斷一個(gè)集合是否是另一個(gè)集合的子集的簡(jiǎn)單方法
本文介紹利用C#中內(nèi)置的系統(tǒng)函數(shù)判斷一個(gè)集合是否是一個(gè)集合的子集的方法,此方法代碼量極少,分享給大家。2016-04-04C# 使用鼠標(biāo)點(diǎn)擊對(duì)Chart控件實(shí)現(xiàn)數(shù)據(jù)提示效果
這篇文章主要介紹了C# 使用鼠標(biāo)點(diǎn)擊對(duì)Chart控件實(shí)現(xiàn)數(shù)據(jù)提示效果,文章給予上一篇的詳細(xì)內(nèi)容做延伸介紹,需要的小伙伴可任意參考一下2022-08-08C#實(shí)現(xiàn)文件操作(復(fù)制,移動(dòng),刪除)的方法詳解
File類(lèi)提供了常見(jiàn)的文件操作函數(shù),包括復(fù)制、移動(dòng)、刪除、創(chuàng)建快捷方式等,本文將通過(guò)一些簡(jiǎn)單的示例為大家詳細(xì)講講具體的使用,希望對(duì)大家有所幫助2023-05-05