C# Winform实现波浪滚动效果
作者:四原色 发布时间:2023-05-05 04:36:54
标签:C#,波浪滚动
本文实例为大家分享了C# Winform实现波浪滚动效果的具体代码,供大家参考,具体内容如下
设计思路
1、首先,理解一个概念:正弦波,余弦波。相信接受过九年义务教育的同志都清楚,
听说某华大学的高材生表示小学一年级就会计算三角函数,~~~~。
2、本人使用的是C#实现的,至于有人说JAVA效率更高,那也可以使用JAVA,只要原理清晰就ok.
3、碍于本人算法技术的局限,最终产生的效果并不是最优解,人山人海的CSDN里希望能有读者看完我的见解后能提出更好的算法思想!:)
4、既然是平面运动,我们先从具体的点说起:
(1)每一个点都是按照规则的圆周轨迹运动的,其次每一次变化每个点的横坐标位置根据sin()函数计算,纵坐标根据cos()函数计算。
(2)对于每一列的点,他们的横坐标根据M(对应代码中的double型变量M值,代表圆周运动的角度,以下m同理)的值来依次偏移,
(3)对于每一行的点 ,他们的纵坐标根据m(对应代码中的double型变量m值)的值来依次偏移,
5、尝试过程有:
【1】、对单个点的横纵坐标均不设置偏移,效果入图:
【2】、仅对纵坐标设置偏移的效果:
【3】、横纵坐标都设置偏移的效果见下面的设计效果。
设计效果
具体代码
不想写注释,毕竟代码量少。
但是还是想说明一下,记得添加一个Timer控件,具体的Interval值自己设置,这里设置的是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);
}
来源:https://blog.csdn.net/qq_44140450/article/details/109897725


猜你喜欢
- SpringBoot 中使用activeMq的步骤:1、pom中引入jar包: <dependency>  
- 什么是死锁我们先看看这样一个生活中的例子:在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车A和B分别由
- 在.NET中有三种计时器:一、 System.Windows.Forms命名空间下的Timer控件,和所在的Form属于同一个线程。Time
- 本文实例讲述了Android编程之SMS读取短信并保存到SQLite的方法。分享给大家供大家参考,具体如下:Android 之 SMS 短信
- 我们知道,Maven 是通过仓库对依赖进行管理的,当 Maven 项目需要某个依赖时,只要其 POM 中声明了依赖的坐标信息,Maven 就
- 一、项目简述功能javaweb 网上商城系统,前台+后台管理,用户注册,登录,上哦展示,分组展示,搜索,收货地址管理,购物车管理,添加,购买
- 前言Java8 由Oracle在2014年发布,是继Java5之后最具革命性的版本。Java8吸收其他语言的精髓带来了函数式编程,lambd
- 今天在做项目学习的过程中,需要用到文件上传,启动项目正常,访问上传post请求突然报出了一个异常,特此记录一下。1、控制台异常org.spr
- 微信小程序与aspnetcore signalr实例本文不对小程序与signalr做任何介绍,默认读者已经掌握aspnetcore Sign
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- Android安全加密专题文章索引Android安全加密:对称加密Android安全加密:非对称加密Android安全加密:消息摘要Mess
- Java类库及其组织结构(Java API)Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为J
- 步骤:1、创建一个项目,该项目主要用来设计用户控件。2、创建一个用户控件窗体,用来设计用户控件。3、向用户控件窗体中添加一个按钮(butto
- 在谈 Volatile 之前,我们先回顾下 Java 内存模型 的三要素:原子性、可见性、有序性,也就是大家常提到的并发编程三要素。并发编程
- 这篇文章主要介绍了Java并发编程预防死锁过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- YAMLSpring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项
- 依赖 <dependency> <gro
- 一、前言Java 8 引入了默认方法以及可以在接口中定义的静态方法。默认方法是一个普通的 java 方法,但以 default 关键字开头,
- 今天在QQ空间看到一篇关于C#语言验证18位身份证号码的验证方法和实例代码,抽了些时间学习了一下,个人觉得还不错,所以把它记了下来,方便以后
- android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言。package com.example.android