有大神 做過lg坐標系的嗎?
縱坐標是lg
做出來的效果個excel的lg一樣
uj5u.com熱心網友回復:
無非就是數值經過Log計算以后再映射到Y坐標上咯uj5u.com熱心網友回復:
閑著,寫個例子吧,新建工程,表單拉大點,放一個picturebox,一個按鈕,然后黏貼下面的代碼
Dim X0 As Long, Y0 As Long '坐標原點在picture中的坐標
Dim lngBorder As Long '影像相對于picture邊框留空距離
Dim XMAX As Double, YMAX As Double '坐標上 XY所能表示的最大值,這里默認最小值為0,懶得倒騰負數了,有需要自己改
Private Sub Command1_Click()
Picture1.Width = 6000
Picture1.Height = 6000
Picture1.ScaleHeight = Picture1.Height
Picture1.ScaleWidth = Picture1.Width
Dim test(1 To 10) As Double
Dim i As Integer
For i = 1 To 10
test(i) = Exp(i + (Rnd() - 0.5) * i * 0.3) 'f(i) = exp(i) 在ln坐標系下應該是一條直線,加一點隨機干擾讓線條不要太直
Next
Render test
End Sub
Private Sub Render(data() As Double)
XMAX = 10: YMAX = 37000 'Y最大值根據用例,最大可能值是 exp(10.5) = 36315 我們取 37000
lngBorder = 400
X0 = lngBorder: Y0 = Picture1.ScaleHeight - lngBorder '坐標原點定義
Picture1.Cls
'畫坐標系
Picture1.DrawWidth = 1
Dim i As Long, j As Long
Picture1.Line (X0 - lngBorder / 2, Y0)-(Picture1.ScaleWidth - lngBorder / 2, Y0), vbBlue
Picture1.Line (X0, Y0 + lngBorder / 2)-(X0, lngBorder / 2), vbBlue
For j = 0 To 4
For i = 10 ^ j To 10 ^ (j + 1) Step 10 ^ j
Picture1.Line (X0, TRANY(i))-(Picture1.ScaleWidth - lngBorder / 2, TRANY(i)), RGB(200, 200, 255)
Next
Picture1.CurrentX = 0: Picture1.CurrentY = TRANY(i - 1) - 100: Picture1.Print Trim(Str(i - 10 ^ j))
Next
'畫曲線
Picture1.CurrentX = X0 + LBound(data) / XMAX * (Picture1.ScaleWidth - lngBorder * 2)
Picture1.CurrentY = TRANY(data(LBound(data)))
Picture1.DrawWidth = 2
For i = LBound(data) To UBound(data)
Picture1.Line -(X0 + i / XMAX * (Picture1.ScaleWidth - lngBorder * 2), TRANY(data(i))), RGB(255, 0, 0)
Next
'標注數值
For i = LBound(data) To UBound(data)
Picture1.CurrentX = X0 + i / XMAX * (Picture1.ScaleWidth - lngBorder * 2)
Picture1.CurrentY = TRANY(data(i)) + 100
Picture1.Print Round(data(i), 2)
Next
End Sub
Private Function TRANY(ByVal dblIn As Double) As Double
TRANY = Y0 - (Log(dblIn) / Log(YMAX)) * (Picture1.ScaleHeight - lngBorder * 2)
End Function
uj5u.com熱心網友回復:
自繪是早晚要學會的技能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/50005.html
標籤:VB基礎類
下一篇:串口接收資料問題
