C# Winform實現(xiàn)波浪滾動效果
本文實例為大家分享了C# Winform實現(xiàn)波浪滾動效果的具體代碼,供大家參考,具體內(nèi)容如下
設(shè)計思路
1、首先,理解一個概念:正弦波,余弦波。相信接受過九年義務(wù)教育的同志都清楚,
聽說某華大學(xué)的高材生表示小學(xué)一年級就會計算三角函數(shù),~~~~。
2、本人使用的是C#實現(xiàn)的,至于有人說JAVA效率更高,那也可以使用JAVA,只要原理清晰就ok.
3、礙于本人算法技術(shù)的局限,最終產(chǎn)生的效果并不是最優(yōu)解,人山人海的CSDN里希望能有讀者看完我的見解后能提出更好的算法思想?。海?/p>
4、既然是平面運動,我們先從具體的點說起:
(1)每一個點都是按照規(guī)則的圓周軌跡運動的,其次每一次變化每個點的橫坐標位置根據(jù)sin()函數(shù)計算,縱坐標根據(jù)cos()函數(shù)計算。
(2)對于每一列的點,他們的橫坐標根據(jù)M(對應(yīng)代碼中的double型變量M值,代表圓周運動的角度,以下m同理)的值來依次偏移,
(3)對于每一行的點 ,他們的縱坐標根據(jù)m(對應(yīng)代碼中的double型變量m值)的值來依次偏移,

5、嘗試過程有:
【1】、對單個點的橫縱坐標均不設(shè)置偏移,效果入圖:

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

【3】、橫縱坐標都設(shè)置偏移的效果見下面的設(shè)計效果。
設(shè)計效果

具體代碼
不想寫注釋,畢竟代碼量少。
但是還是想說明一下,記得添加一個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);
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C# winform點擊生成二維碼實例代碼
- 新手小白用C# winform 讀取Excel表的實現(xiàn)
- C# WinForm狀態(tài)欄實時顯示當(dāng)前時間(窗體狀態(tài)欄StatusStrip示例)
- C# 使用Winform 獲取下拉框 選中的值
- C#-WinForm跨線程修改UI界面的示例
- Winform 實現(xiàn)進度條彈窗和任務(wù)控制
- c# winform 解決PictureBox 無法打印全部圖片的問題
- C# winform中窗口關(guān)閉按鈕的隱藏與禁用詳解
- C# WinForm-Timer控件的使用
- C# Winform按鈕中圖片實現(xiàn)左圖右字的效果實例
- winform 調(diào)用攝像頭掃碼識別二維碼的實現(xiàn)步驟
相關(guān)文章
采用easyui tree編寫簡單角色權(quán)限代碼的方法
本文主要介紹了如何采用easyui tree編寫簡單角色權(quán)限代碼,文章思路清晰,需要的朋友可以參考下2015-07-07
C#使用SQL DataReader訪問數(shù)據(jù)的優(yōu)點和實例
今天小編就為大家分享一篇關(guān)于C#使用SQL DataReader訪問數(shù)據(jù)的優(yōu)點和實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10
C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn)
本文主要介紹了C#?網(wǎng)域賬號(Domain)驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04

