扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
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
显示的效果图:
代码原理如下:
读取.wave
播放.wave
在播放的同时根据波形数据生成图形显示出来。
VB.NET画图是不能设置双缓冲的,双缓冲是指窗体,从来没说是针对控件。
不用graphic.clear清理重画就不会闪烁。你可以先把容器删了再重新建立一个再去画。
简单举例:
Graphics g;
Pen p;
Panel pl;
构造函数初始化:
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);
//继续画
在写代码之前,我们需要知道标准的正弦函数(以下称为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
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流