c# 直接再form上画波形_c#画各种波形图

本文介绍了如何使用C#在Windows Form上绘制各种波形,包括三角波、直线、方波、脉冲波、正态分布噪声和锯齿波。通过创建waveFunction类并实现各个波形的函数,然后在Form的button点击事件中调用这些函数并显示在图表控件上。代码实现包括多个波形函数,如triangular、line、rectangle等,并通过range函数根据指定的x坐标范围绘制波形。
摘要由CSDN通过智能技术生成

最近老师叫用c#实现几个波形图,由于从来没有做过类似的事情,所以很迷茫,老师给出一些建议之后大概有了一个方向。先将目标图放出

我的思路如下:

1.首先将给出的六个图像的函数写出,大概有两种方法,一是把可以写成分段函数的图像写成分段函数,高斯白噪声用正态分布的方法,二是用傅里叶三角函数表示。这里我使用第一种方法。

2.写一个方法,输入为x的起止值,输出位对应段波形。

3.写出函数后验证函数是否正确,在Windows form上面画出图形,若和给出图一致,则函数编写正确。

下面为大家贴出代码

首先创建一个winform程序,添加wavefunction类,在此类里面写出各波的实现函数。

//作者屁屁烫

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace WaveForm1

{

public class waveFunction

{

//三角波一个周期波形函数,输入参数为上图对应参数

public static List> triangular(double Amplitude, double Offset, double Frequency, double Phase)

{

//设置x,y的列表来储存x,y的值。分为几段函数就设置几个列表

List x1 = new List();

List y1 = new List();

List x2 = new List();

List y2 = new List();

List x3 = new List();

List y3 = new List();

double T = (double)(1 / Frequency);//周期T

int num = 200;//一个周期取值200个点画线

//用for循环遍历将x,y的值存入列表

for (int i = 1; i < (num / 4) + 1; i++)

{

x1.Add((i * (T / num)) + Phase);

x3.Add((i * (T / num) + 3 * (T / 4)) + Phase);

y1.Add((double)((Amplitude / (T / 4)) * ((i * (T / 200))) + Offset));

y3.Add((double)(((4 * ((i * (T / 200) + 3 * (T / 4))) - 3 * T) / T * Amplitude) - Amplitude) + Offset);

}

for (int i = 1; i < (num / 2) + 1; i++)

{

x2.Add((i * (T / num) + T / 4) + Phase);

y2.Add((double)(((T /2- ((i * (T / 200) + T / 4))))*(Amplitude /(T /4)) + Offset));

}

//用中间变量将分段的函数列表中所有元素依次存入一个列表resX(Y)

List X = x1.Concat(x2).ToList();

List resX = X.Concat(x3).ToList();

List Y = y1.Concat(y2).ToList();

List resY = Y.Concat(y3).ToList();

//创建一个列表N,T存储预设值num(一个周期的取点数量),周期

List resN = new List();

List resT = new List();

resN.Add(num);

resT.Add(T);

//创建一个list的list列表,将四个列表添加到此列表中

List> RET = new List>();

RET.Add(resX);

RET.Add(resY);

RET.Add(resN);

RET.Add(resT);

//返回一个元素为list的list

return RET;

}

//直线函数,注释参见三角波函数

public static List> line(double Offset)

{

List y1 = new List();

List x1 = new List();

int num = 201;

double T = 10;

for (int i = 0; i < num; i++)

{

x1.Add(i * (T / 200));

y1.Add(Offset);

}

List resN = new List();

List resT = new List();

resN.Add(num);

resT.Add(T);

List> RET = new List>();

RET.Add(x1);

RET.Add(y1);

RET.Add(resN);

RET.Add(resT);

return RET;

}

//方波函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值