vbnet畫sin的簡單介紹

VB正弦曲線怎么畫?

在寫代碼之前,我們需要知道標準的正弦函數(shù)(以下稱為sin函數(shù)),最大值是1,最小值是-1,幾個關鍵點是0,±n*π/2,±n*π,而且它是周期性的,我們不可能讓VB真的無限畫下去,只需要在可見的窗體上繪制就行了。說sin的概念是為了確定坐標系,因為sin最大值也只有1,所以我們要放大它的值,以便顯示最好的效果,如果不確定坐標系,可能畫出來一條近似直線的波浪線。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站設計、網(wǎng)站建設、鳳凰網(wǎng)絡推廣、小程序制作、鳳凰網(wǎng)絡營銷、鳳凰企業(yè)策劃、鳳凰品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供鳳凰建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:muchs.cn

首先,在Form_Load的事件里面寫好坐標系,如果自己邏輯好這步確實可以不做,但是不做的結果就是需要寫代碼的人自己考慮偏移量,所以定好坐標系之后,寫的函數(shù)就簡單直觀許多了。自定義坐標系的方法是:scale(x1,y1)-(x2,y2).

第二,開始寫sin的函數(shù),可以寫在模塊里面,也可以直接在窗體代碼區(qū)寫,寫模塊是為了以后調試方便,如果只是為了顯示標準的sin函數(shù),在窗體寫也可以。定義幾個雙精度付典型的變量y,x ?,函數(shù)關系是y=sin(x)

第三,繪制一個點,當然是sin上的點。第二步已經(jīng)獲得了x和y,正好是橫坐標和縱坐標,我們?yōu)榱俗屒€平滑一些,可以Line方法,因為真的畫點十分吃內存,比較卡,也就是我們畫線不畫點(很短很短的先近似于點),方法是Line (x1,y1)-(x2,y2)

最后,套用循環(huán)語句輸出,其實說這是最后也不太合適,這部其實是套在第三步和第二步之外的,也就是確定x軸顯示區(qū)間和曲線平滑度的作用。

'代碼

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中如何編程實現(xiàn)繪制正弦函數(shù)

在窗體的?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度,每一度畫一個點,對應的創(chuàng)建一個下標從0到360的數(shù)組

Dim?pointfs(360)?As?System.Drawing.PointF

'創(chuàng)建畫筆,顏色為黑色,線寬為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的值外,還要把坐標變換一下。數(shù)字50是正弦曲線的幅度

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

Next

'根據(jù)畫筆和點數(shù)組將曲線畫出來

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曲線,

根據(jù)時間變化繪制的,即時的,或許可以用chart圖表控件,百度會出現(xiàn)微軟網(wǎng)站的資料。

sin曲線永遠是哪個樣子,你是怎么變化?一般的移動,可以用offset控制向左平移,右邊則增加點,看上去應該是在移動

大佬們~VisualStudio中vb.net如何畫三角函數(shù)圖像?

VB系統(tǒng)的坐標原點在左上角,X軸的正方向是水平向右,而Y軸的正方向是垂直向下。所以,要繪制三角函數(shù)的曲線,自己可以通過改變點坐標的方法來實現(xiàn),當然,VB.NET提供了相應的方法可以來實現(xiàn)坐標變換,也可以通過VB.Net的Graphics類提供的平移、旋轉等轉換來實現(xiàn)。

下面是我通過自己變換實現(xiàn)的示例,提供參考;我的環(huán)境是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

? '先獲得正弦值,保存到點坐標數(shù)組

? 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的簡單介紹
網(wǎng)頁網(wǎng)址:http://muchs.cn/article46/dosdgeg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、移動網(wǎng)站建設、建站公司Google、靜態(tài)網(wǎng)站、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司