option explicit
dim intrate%, intdeg%, m!, n!
'intrate表示速度 ,intdeg表示sin(x)中x的角度 ,n表示幅值放大的倍數,m表示sin(x)的函式週期倍數
private sub command1_click()
call drawaxis(picture1)
timer1.enabled = true
command2.caption = "停止"
command1.enabled = false
end sub
private sub command2_click()
if command2.caption = "停止" then
command2.caption = "繼續"
timer1.enabled = false ' 關閉時鐘控制項
elseif command2.caption = "繼續" then
command2.caption = "停止"
timer1.enabled = true
end if
end sub
private sub command3_click()
unload me
end sub
private sub form_load()
timer1.interval = 50
timer1.enabled = false
option1(1).value = true
option2(1).value = true
option3(1).value = true
m = 1
n = 1
end sub
private sub form_unload(cancel as integer)
timer1.enabled = false
end sub
private sub drawaxis(picx as picturebox) '自定義繪製座標軸過程
dim x1%, y1%, x2%, y2%, y%
picx.backcolor = vbwhite '置框背景色
picx.cls ' 清屏
picx.drawstyle = 0 '置框為畫實線
x1 = 120 ' 第一點的橫座標
y2 = 120 '第二點的縱座標
y1 = picx.scaleheight - 120 '第一點的縱座標
x2 = picx.scalewidth - 120 ' 第二點的橫座標
y = picx.scaleheight / 2
picx.line (x1, y1)-(x1, y2), qbcolor(0) ' 畫y軸,自下而上
picx.line (x1, y)-(x2, y), qbcolor(0) ' 畫x軸,自左向右
picx.line (x1 - 50, y2 + 50)-(x1, y2), qbcolor(0) '畫y軸箭頭
picx.line (x1 + 50, y2 + 50)-(x1, y2), qbcolor(0)
picx.currentx = 300
picx.currenty = 200
picx.print "y軸"
picx.line (x2 - 50, y + 50)-(x2, y), qbcolor(0) '畫x軸箭頭
picx.line (x2 - 50, y - 50)-(x2, y), qbcolor(0)
picx.currentx = x2 - 200
picx.currenty = y + 200
picx.print "x軸"
end sub
private sub option1_click(index as integer)
select case index
case 0
m = 0.5 ' 放大一倍
case 1
m = 1 ' 幅值不變
case 2
m = 2 ' 縮小一倍
end select
end sub
private sub option2_click(index as integer)
select case index
case 0
n = 2 ' 幅值放大一倍
case 1
n = 1 ' 幅值不變
case 2
n = 0.5 ' 幅值縮小一倍
end select
end sub
private sub option3_click(index as integer)
'改變迴圈語句的迴圈次數以調整繪製速度
select case index
case 0 ' 快速
intrate = 20
case 1
intrate = 8 ' 中速
case 2
intrate = 2 '慢速
end select
end sub
private sub timer1_timer()
dim x%, y%, i%, scaly%
scaly = (picture1.scaleheight - 120) / 4 ' 訊號最大值
for i = 1 to intrate
picture1.currentx = 120 ' 獲取原點的座標
picture1.currenty = (picture1.scaleheight) / 2
x = intdeg / 180 * scaly ' 取畫點的x座標
y = sin(m * intdeg * 3.141593 / 180) * n * scaly ' 取畫點的y座標
picture1.pset step(x, -y), vbblue
intdeg = intdeg + 1
if picture1.currentx > picture1.scalewidth - 120 then
intdeg = 0
command2.value = true ' 相當於按了 command2按鈕
command1.enabled = true ' 相當於按了 command1按鈕
end if
next
end sub
線段的畫法
在畫線段時,應該把線段理解成向量,因為線段也是有大小,有方向。並且建立乙個線段的類,因為每條線段都是不同的物件。線段類的x,y屬性就是線段的起點,再新增兩個屬性,記錄線段的終點。下面是乙個簡單的例子,在實際開發時,要把線段單獨作為乙個型別來處理。如下 package public function ...
正弦函式及其FFT變換 二
fft變換,其實就是快速離散傅利葉變換,傅利葉變換是數字訊號處理領域一種很重要的演算法。要知道傅利葉變換演算法的意義,首先要了解傅利葉原理的意義。傅利葉原理表明 任何連續測量的時序或訊號,都可以表示為不同頻率的正弦波訊號的無限疊加。而根據該原理創立的傅利葉變換演算法利用直接測量到的原始訊號,以累加方...
go語言系列 輸出正弦函式
庫與包之間的理解可以模擬成 資料庫種的庫和表 庫名作用 image 常見圖形格式的訪問及生成 log日誌記錄庫 math 數學庫os 作業系統平台不依賴平台操作封裝 檢視庫與包的幫助文件 package main import image image color image png log math...