下面是線性曲線擬合的代碼,程式運行顯示的是一條直線,但我現在需要一個多項式曲線擬合的程式,也就是說我需要這個程式能顯示出曲線,就是做一個二次或二次以上的多項式曲線擬合的程式,只要能在圖片框中運行出擬合曲線的結果就行,最好能給我標注一下主要代碼的意思,以下的標注不知道對不對,哪位大神能幫幫忙,小白不勝感激!!!




Dim x() As Single, y() As Single, i As Integer, n As Integer, m As Integer’定義為單精度浮點數和整型
Dim sumx As Double, sumy As Double, xaver As Double, yaver As Double
Dim xy As Double, x2 As Double
Dim a As Double, b As Double
Dim xmax As Double, xmin As Double
Dim ymax As Double, ymin As Double’定義為雙精度浮點數
Private Sub Command1_Click()
Randomize’陳述句初始化亂數生成器
n = InputBox("請輸入坐標點個數:")’資料輸入陳述句
If n = 0 Then
MsgBox "請輸入坐標點個數"’提示資訊
Command1.Enabled = True
ElseIf n = 1 Then
MsgBox "單點無法擬合,請重新輸入"
Exit Sub
Command1.Enabled = False
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
Else
Command1.Enabled = False
Command2.Enabled = True
Command4.Enabled = True
End If
ReDim x(n)
ReDim y(n) ’定義陣列
For i = 1 To n
x(i) = InputBox("請輸入第" & i & "個點的橫坐標")
sumx = sumx + x(i)
Text1 = Text1 & "第" & i & "個點:(" & x(i)
y(i) = InputBox("請輸入第" & i & "個點的縱坐標")
sumy = sumy + y(i)
Text1 = Text1 & "," & y(i) & " )" & vbCrLf’輸出到text1,vbCrLf回車加換行
Next i
End Sub
Private Sub Command2_Click()
Picture1.Cls’清空影像上的內容
Picture1.DrawWidth = 1’回傳或設定圖形方法輸出的線寬為1
Command2.Enabled = False
Command3.Enabled = True
Command4.Enabled = True
xmax = x(1): xmin = x(1)
ymax = y(1): ymin = y(1)
For i = 2 To n
If xmax < x(i) Then
xmax = x(i)
End If
If xmin > x(i) Then
xmin = x(i)
End If
Next i
For i = 2 To n
If ymax < y(i) Then
ymax = y(i)
End If
If ymin > y(i) Then
ymin = y(i)
End If
Next i
If xmax = xmin Then
Picture1.Scale (xmin * 0.5, ymax + 0.2 * (ymax - ymin))-(xmin * 1.5, ymin - 0.2 * (ymax - ymin))
zbz xmin * 0.5, ymax + 0.2 * (ymax - ymin), xmin * 1.5, ymin - 0.2 * (ymax - ymin)
ElseIf ymax = ymin Then
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax * 1.5)-(xmax + 0.2 * (xmax - xmin), ymin * 0.5)
zbz xmin - 0.2 * (xmax - xmin), ymax * 1.5, xmax + 0.2 * (xmax - xmin), ymin * 0.5
Else
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin))-(xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin))
zbz xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin), xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin) ’自定義坐標系
End If
Picture1.DrawWidth = 5’圖片框輸出線寬為5
For i = 1 To n
Picture1.PSet (x(i), y(i)), vbRed’在圖片框上畫點
Next i
End Sub
Private Sub Command3_Click()
Command3.Enabled = False
Command4.Enabled = True
Picture2.Cls
xaver = sumx / n
yaver = sumy / n
For i = 1 To n
xy = xy + x(i) * y(i)
x2 = x2 + x(i) * x(i)
Next i
b = (xy - n * xaver * yaver) / (x2 - n * xaver * xaver)
a = yaver - b * xaver
a = Left(a, 6)
b = Left(b, 6)
Picture2.Print "y=" & b & "x+" & a
If xmax = xmin Then
Picture1.Scale (xmin * 0.5, ymax + 0.2 * (ymax - ymin))-(xmin * 1.5, ymin - 0.2 * (ymax - ymin))
zbz xmin * 0.5, ymax + 0.2 * (ymax - ymin), xmin * 1.5, ymin - 0.2 * (ymax - ymin)
Picture1.Line (xmax, ymax + 0.2 * (ymax - ymin))-(xmax, ymin - 0.2 * (ymax - ymin)), vbBlue’在圖片框里畫直線
ElseIf ymax = ymin Then
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax * 1.5)-(xmax + 0.2 * (xmax - xmin), ymin * 0.5)
zbz xmin - 0.2 * (xmax - xmin), ymax * 1.5, xmax + 0.2 * (xmax - xmin), ymin * 0.5
Picture1.Line (xmin - 0.2 * (xmax - xmin), ymax)-(xmax + 0.2 * (xmax - xmin), ymin), vbBlue’在圖片框里畫直線
Else
Picture1.Scale (xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin))-(xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin))
zbz xmin - 0.2 * (xmax - xmin), ymax + 0.2 * (ymax - ymin), xmax + 0.2 * (xmax - xmin), ymin - 0.2 * (ymax - ymin)
Picture1.Line (xmin - 0.2 * (xmax - xmin), b * (xmin - 0.2 * (xmax - xmin)) + a)-(xmax + 0.2 * (xmax - xmin), b * (xmax + 0.2 * (xmax - xmin)) + a), vbBlue’在圖片框里畫直線
End If
End Sub
Private Sub Command4_Click()
Text1.Text = ""
Picture1.Cls
Picture2.Cls
Command1.Enabled = True
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
End Sub
Private Sub Command5_Click()
End
End Sub
Private Sub Form_Activate()’表單被選為活動表單時的載入事件
Dim s As Integer, l As Single’定義為整型,單精度浮點數
Dim p1 As Single, p2 As Single
p1 = ScaleWidth: p2 = ScaleHeight’
l = 255 / p1
For s = 0 To p1
Line (s, 0)-(s, p2), RGB(255 - s * l, 255 - s * l, 255 - s * l)
Next s
End Sub
Private Sub Form_Load()
Command2.Enabled = False
Command3.Enabled = False
Command4.Enabled = False
Picture1.AutoRedraw = True
End Sub
Function zbz(ByVal x1 As Single, y1 As Single, x2 As Single, y2 As Single) ’定義zbz為function程序。Byval 表示引數是按值來傳遞
For i = x1 + (x2 - x1) / 5 To x2 Step (x2 - x1) / 5
Picture1.Line (i, y2 + 100 * (y1 - y2) / Picture1.Height)-(i, y2) ’直線的兩個端點位置
Picture1.CurrentX = i - 250 * (x2 - x1) / Picture1.Width’當前列印橫坐標的位置
Picture1.CurrentY = y2 + 350 * (y1 - y2) / Picture1.Height’當前列印縱坐標的位置
Picture1.Print i
Next
For i = y2 + (y1 - y2) / 5 To y1 Step (y1 - y2) / 5
Picture1.Line (x1, i)-(x1 + 100 * (x2 - x1) / Picture1.Width, i)
Picture1.CurrentX = x1 + 150 * (x2 - x1) / Picture1.Width
Picture1.CurrentY = i + 80 * (y1 - y2) / Picture1.Height
Picture1.Print i
Next
End Function
uj5u.com熱心網友回復:
可以發我郵箱[email protected]。.跪求各位大神
uj5u.com熱心網友回復:
沒勞務費?反正我不是雷鋒。uj5u.com熱心網友回復:
貌似分給的不夠多!轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/88088.html
標籤:網絡編程
