网站建设资讯

NEWS

网站建设资讯

vbnet画sin的简单介绍

VB正弦曲线怎么画?

在写代码之前,我们需要知道标准的正弦函数(以下称为sin函数),最大值是1,最小值是-1,几个关键点是0,±n*π/2,±n*π,而且它是周期性的,我们不可能让VB真的无限画下去,只需要在可见的窗体上绘制就行了。说sin的概念是为了确定坐标系,因为sin最大值也只有1,所以我们要放大它的值,以便显示最好的效果,如果不确定坐标系,可能画出来一条近似直线的波浪线。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站建设、凤凰网络推广、小程序制作、凤凰网络营销、凤凰企业策划、凤凰品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供凤凰建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

首先,在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

vb2008中如何编程实现绘制正弦函数

在窗体的 Paint 事件中写代码,如果是pictureBox,就在pictureBox的Paint事件中写。

这是最基本的过程,关于坐标的问题,可能可以把整个窗体坐标重定义为笛卡尔坐标,但是本人也不是很清楚,请另行百度。

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint

'获取窗体的绘图对象

Dim grpf As Graphics = e.Graphics

'从0到360度,每一度画一个点,对应的创建一个下标从0到360的数组

Dim pointfs(360) As System.Drawing.PointF

'创建画笔,颜色为黑色,线宽为2个像素。待会画出的线条就是黑色的,两个像素宽度

Dim p As Pen = New Pen(Color.Black, 2)

'sin的计算需要用弧度,前面定义是角度,所以定义一个弧度的变量

Dim arc As Single

'将每个点计算出来

For i As Integer = 0 To 360

pointfs(i).X = i * 1.5 '乘1.5可以把线条横向拉长1.5倍

'将角度转换为弧度

arc = i / 180 * Math.PI

'由于窗体的坐标和笛卡尔坐标不同,为了看起来像是笛卡尔坐标上的形状,除了计算

'sin的值外,还要把坐标变换一下。数字50是正弦曲线的幅度

pointfs(i).Y = Math.Sin(arc) * -50 + 50

Next

'根据画笔和点数组将曲线画出来

grpf.DrawCurve(p, pointfs)

End Sub

VB.NETsin曲线

Dim Points1(30) As Point

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Timer1.Enabled = True

Timer1.Interval = 200

For i = 0 To 30

Points1(i) = New Point(i * 45, Math.Sin(i) * (PictureBox1.Height - 50) / 9)

Points1(i).Offset(-450, Math.Abs(Points1(i).Y - (PictureBox1.Height - 50) / 9) * 3.55 + 43)

Next

End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Static j As Long

j = j + 1

PictureBox1.Image = x_y(PictureBox1, j)

End Sub

Private Function x_y(ByVal pic As PictureBox, ByVal x As Long) As Bitmap

Dim b As New Bitmap(pic.Width, pic.Height)

Dim g As Graphics = Graphics.FromImage(b)

Dim c

Dim j

g.Clear(Color.YellowGreen)

Dim p As New Pen(Color.WhiteSmoke)

p.EndCap = Drawing2D.LineCap.ArrowAnchor

g.DrawLine(p, 20, pic.Height - 20, 20, 10)

g.DrawLine(p, 20, pic.Height - 20, pic.Width - 20, pic.Height - 20)

Dim i As Double

Dim bs As New SolidBrush(Color.Red)

Dim po As New Point

g.DrawString(-2, Me.Font, bs, 12, pic.Height - 18)

po.X = 0

po.Y = pic.Height - 45

For i = -1.6 To 4 Step 0.4

g.DrawString(Math.Round(i, 1), Me.Font, bs, po.X, po.Y)

g.DrawLine(p, po.X + 18, po.Y + 5, po.X + 20, po.Y + 5)

Dim p1 As New Pen(Color.Blue)

p1.DashStyle = Drawing2D.DashStyle.Dash

g.DrawLine(p1, po.X + 28, po.Y + 5, pic.Width - 20, po.Y + 5)

po.Y -= (pic.Height - 50) / 9

Next

po.X = 20

po.Y = pic.Height - 20

For c = 0 To 14400 Step 1200

If (c / 1200) 0 Then

g.DrawString((c / 1200) + x, Me.Font, bs, po.X - j, po.Y + 5)

End If

g.DrawLine(p, po.X, po.Y + 2, po.X, po.Y)

po.X += (pic.Width - 50) / 12

Next

For i = 0 To Points1.Count - 1

Points1(i).Offset(45, 0)

Next

If x Mod 6 = 0 Then

For i = 0 To Points1.Count - 1

Points1(i).Offset(-270, 0)

Next

End If

g.DrawCurve(Pens.Red, Points1)

'For i = 0 To Points1.Count - 1

'g.DrawString(Math.Sin(i), Me.Font, Brushes.Red, Points1(i))

'Next

Return b

End Function

vb.net中绘制一条 sin波形曲线,纵轴是峰值,横轴是时间,刚才你教我那个是单独画一条sin曲线,

根据时间变化绘制的,即时的,或许可以用chart图表控件,百度会出现微软网站的资料。

sin曲线永远是哪个样子,你是怎么变化?一般的移动,可以用offset控制向左平移,右边则增加点,看上去应该是在移动

大佬们~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

显示的效果图:


网页题目:vbnet画sin的简单介绍
分享地址:http://njwzjz.com/article/dosdgeg.html