正文
vb.net画正弦波 绘制正弦波
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
大佬们~VisualStudio中vb.net如何画三角函数图像?
VB系统的坐标原点在左上角,X轴的正方向是水平向右,而Y轴的正方向是垂直向下。所以,要绘制三角函数的曲线,自己可以通过改变点坐标的方法来实现,当然,VB.NET提供了相应的方法可以来实现坐标变换,也可以通过VB.Net的Graphics类提供的平移、旋转等转换来实现。
下面是我通过自己变换实现的示例,提供参考;我的环境是VB.NET 2010
Imports System.Math
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'1,获得一个Graphics对象
Dim MyGraphics As Graphics
MyGraphics = PictureBox1.CreateGraphics
'2,定义一个Pen对象,用于绘制图形(轮廓线)
Dim MyPen As New Pen(Color.Black, 1)
'3,定义一个Brush对象,用于填充图形(如果需要填充的话)
Dim MyBrush As New SolidBrush(Color.Orange)
MyGraphics.DrawLine(MyPen, 0, 200, 700, 200)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'1,获得一个Graphics对象
Dim MyGraphics As Graphics
MyGraphics = PictureBox1.CreateGraphics
'2,定义一个Pen对象,用于绘制图形(轮廓线)
Dim MyPen As New Pen(Color.Black, 1)
'3,定义一个Brush对象,用于填充图形(如果需要填充的话)
Dim MyBrush As New SolidBrush(Color.Orange)
'声明横向和纵向比例变量
Dim Heng As Integer = 20
Dim Zong As Integer = 50
'先获得正弦值,保存到点坐标数组
Dim MyPoints(700) As Point
Dim i As Integer
For i = 0 To 700
MyPoints(i) = New Point(i * Heng, 200 + Sin(i) * Zong)
Next
'采用绘制光滑线连接点的方式绘制曲线
MyGraphics.DrawCurve(MyPen, MyPoints)
End Sub
End Class
显示的效果图:
VB.net绘图具体如何设置双缓冲
VB.NET画图是不能设置双缓冲的vb.net画正弦波,双缓冲是指窗体,从来没说是针对控件。
不用graphic.clear清理重画就不会闪烁。你可以先把容器删了再重新建立一个再去画。
简单举例vb.net画正弦波:
Graphics g;
Pen p;
Panel pl;
构造函数初始化vb.net画正弦波:
p=new Pen(Color.Red,2);
pl=panel1;
造成闪烁的画法:
g=pl.CreateGraphics();
g.Clear(SystemColor.ButtonFace);
//.....画新的
不会闪烁的办法:
this.Controls.ReMoveAt(panel1);
pl=new Panel();
pl.Name="panel1";
//....创建容器控件
this.Controls.Add(pl);
//继续画
VB正弦曲线怎么画?
在写代码之前,我们需要知道标准的正弦函数(以下称为sin函数),最大值是1,最小值是-1,几个关键点是0,±n*π/2,±n*π,而且它是周期性的,我们不可能让VB真的无限画下去,只需要在可见的窗体上绘制就行了。说sin的概念是为了确定坐标系,因为sin最大值也只有1,所以我们要放大它的值,以便显示最好的效果,如果不确定坐标系,可能画出来一条近似直线的波浪线。
首先,在Form_Load的事件里面写好坐标系,如果自己逻辑好这步确实可以不做,但是不做的结果就是需要写代码的人自己考虑偏移量,所以定好坐标系之后,写的函数就简单直观许多了。自定义坐标系的方法是:scale(x1,y1)-(x2,y2).
第二,开始写sin的函数,可以写在模块里面,也可以直接在窗体代码区写,写模块是为了以后调试方便,如果只是为了显示标准的sin函数,在窗体写也可以。定义几个双精度付典型的变量y,x ,函数关系是y=sin(x)
第三,绘制一个点,当然是sin上的点。第二步已经获得了x和y,正好是横坐标和纵坐标,我们为了让曲线平滑一些,可以Line方法,因为真的画点十分吃内存,比较卡,也就是我们画线不画点(很短很短的先近似于点),方法是Line (x1,y1)-(x2,y2)
最后,套用循环语句输出,其实说这是最后也不太合适,这部其实是套在第三步和第二步之外的,也就是确定x轴显示区间和曲线平滑度的作用。
'代码
Private Sub Form_Load()
Me.AutoRedraw = True '开启自动重绘
Form1.Height = 2400 '自定义窗体高度
Form1.Width = 8000 '自定义窗体宽度
Scale (-16, 1.2)-(16, -1.2) '自定义坐标系
Line (-16, 0)-(16, 0) '绘制X轴
Line (0, 1.2)-(0, -1.2) '绘制Y轴
End Sub
Private Sub Command1_Click()
Line (-16, Sin(-16))-(-16, Sin(-16)) '画起始点
Dim x As Double '定义x
Dim y As Double '定义y
For i = -16 To 16 Step 0.1 'step越小,曲线越平滑
x = i
y = Sin(x)
Line -(x, y) '连接上一个点
Next i
End Sub
如何用vb画出简易函数图像
用vb画出简易函数图像的操作步骤为:
(1)新建一个工程,新建一个Form1,在上面添加一个picture控件和一个command控件;
(2)选中此控件,右击"复制",在窗体空白处右击"粘贴",在弹出的对话框中选择"是",创建了一个Command控件数组,复制,使窗体上总共出现7个Command控件;
(3)复制代码:
Const Pi = 3.1415926535 '定义圆周率
Dim a, wor
Dim i As Integer
Static Function Loge(X)
Loge = Log(X) / Log(Exp(1))
End Function
'定义用于在Picture1上的一个位置打印字符函数
Private Function PrintWord(X, y, Word As String)
With Picture1
.CurrentX = X
.CurrentY = y
.ForeColor = RGB(0, 0, 255)
End With
Picture1.Print Word
End Function
Private Function DrawDot(Px, Py, Color)
Picture1.PSet (Px, Py), Color
End Function
Sub XY() '建立直角坐标系
Picture1.DrawWidth = 1 '设置线条宽度
Picture1.Cls
'设定用户坐标系,坐标原点在Picture1中心
Picture1.Scale (-10, 10)-(10, -10)
Picture1.Line (-10, 0)-(10, 0), RGB(0, 0, 255)
Picture1.Line -(9.5, 0.5), RGB(0, 0, 255)
Picture1.Line (10, 0)-(9.5, -0.5), RGB(0, 0, 255)
Picture1.ForeColor = RGB(0, 0, 255)
Picture1.Print "X"
'画 X 轴
Picture1.Line (0, -10)-(0, 10), RGB(0, 0, 255)
Picture1.Line -(0.5, 9.5), RGB(0, 0, 255)
Picture1.Line (0, 10)-(-0.5, 9.5), RGB(0, 0, 255)
Picture1.Print "Y"
'画 Y 轴
For lin = -9 To 9
Picture1.Line (lin, 0)-(lin, 0.25)
wor = PrintWord(lin - 0.5, -0.5, Str(lin))
Picture1.Line (0, lin)-(-0.25, lin)
If lin 0 Then
wor = PrintWord(-0.9, lin, Str(lin))
End If
Next lin
Picture1.DrawWidth = 2
End Sub
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
For a = -3 To 3 Step Pi / 6000
Dot = DrawDot(a, a ^ 2, RGB(0, 0, 0))
Next a
wor = PrintWord(4, 9, "二次曲线 y=x^2")
Case 1
For a = -9 To 9 Step Pi / 6000
Dot = DrawDot(a, a, RGB(0, 0, 0))
Next a
wor = PrintWord(8, 5, "一次曲线 y=x")
Case 2
For a = -9 To 3 Step Pi / 6000
Dot = DrawDot(a, Exp(a), RGB(0, 0, 0))
Next a
wor = PrintWord(4, 9, "指数曲线 y=e^x")
Case 3
For a = 0.0001 To 9 Step Pi / 6000
Dot = DrawDot(a, Loge(a), RGB(0, 0, 0))
Next a
wor = PrintWord(8, 3, "对数曲线 y=ln x")
Case 4
For a = -10 To 10 Step Pi / 6000
Dot = DrawDot(a, Sin(a), RGB(0, 0, 0))
Next a
wor = PrintWord(-5, 2, "正弦曲线 y=sin x")
Case 5
For a = -10 To 10 Step Pi / 6000
Dot = DrawDot(a, Cos(a), RGB(0, 0, 0))
Next a
wor = PrintWord(-9, 2, "余弦曲线 y=cos x")
Case 6
XY
End Select
End Sub
Private Sub Form_Load()
Me.Caption = "数学函数作图?quot;"
Me.Show
Me.AutoRedraw = True
Picture1.AutoRedraw = True
Command1(0).Caption = "二次曲线"
Command1(1).Caption = "一次曲线"
Command1(2).Caption = "指数曲线"
Command1(3).Caption = "对数曲线"
Command1(4).Caption = "正弦曲线"
Command1(5).Caption = "余弦曲线"
Command1(6).Caption = "清空"
XY
End Sub
Private Sub Form_Resize()
Picture1.Width = Me.Width * 0.94
Picture1.Height = Me.Height - (Command1(0).Height * 4 + 100)
Command1(0).Top = Me.Height - (Command1(0).Height * 2.5 + 100)
Command1(0).Left = Me.Width * 0.01
For i = 1 To 6
Command1(i).Top = Me.Height - (Command1(0).Height * 2.5 + 100)
Command1(i).Left = Command1(i - 1).Left + 1000
Next
XY
End Sub
怎么在VB.NET中画.wave文件的波形图
代码原理如下:
读取.wave
播放.wave
在播放的同时根据波形数据生成图形显示出来。
vb.net画正弦波的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于绘制正弦波、vb.net画正弦波的信息别忘了在本站进行查找喔。