Dim a() As Single, b() As Single, c() As Single, n As Integer
Private Sub Command1_Click()
With MSChart1
.chartType = VtChChartType2dLine
.RowCount = n
.ColumnCount = 2
.ShowLegend = True
.Title.Text = "ГРАФИКИ"
For i = 1 To n
.Row = i: .Column = 1
.ColumnLabel = "first"
.RowLabel = CStr(a(i))
.Data = CStr(b(i))
.Column = 2
.ColumnLabel = "second"
.Data = CStr(c(i))
Next i
End With
End Sub
Private Sub Form_Load()
Dim ArrX() As Currency, ArrY() As Currency
Dim NValue As Integer
Dim NFunc As Integer
Const Pi = 3.14
Private Sub Form_Load()
NFunc = 1
cboName.AddItem ("Фигуры Лиссажу")
cboName.AddItem ("Кардиоида")
cboName.AddItem ("Розы")
End Sub
Private Sub Command1_Click()
Cls
PicChart.Cls
MakeChart Text1.Text, CCur(Text2.Text), CCur(Text3.Text), CCur(Text4.Text), CCur(Text5.Text), Text6.Text, Text7.Text, Text8.Text, Text9.Text
End Sub
'Рисование графика функции
Private Sub MakeChart(NValue As Integer, XMin As Currency,
XMax As Currency, YMin As Currency, YMax As Currency, NxGrid As Integer, NyGrid As Integer, TextX As String,
TextY As String)
Dim XCounter As Integer, YCounter As Integer
Dim XStep As Currency, YStep As Currency
Dim XDraw1 As Currency, YDraw1 As Currency, XDraw2 As Currency, YDraw2 As Currency
Dim XYScale As Integer, ValuePrint As Currency
'Установка пользовательских координат
PicChart.Scale (XMin, YMax)-(XMax, YMin)
'Сетка
PicChart.DrawStyle = vbDot
PicChart.DrawWidth = 1
PicChart.ForeColor = vbBlack
XStep = (XMax - XMin) / NxGrid
YStep = (YMax - YMin) / NyGrid
For XCounter = 0 To NxGrid
XDraw1 = XMin + XCounter * XStep
YDraw1 = YMin
YDraw2 = YMax
PicChart.Line (XDraw1, YDraw1)-(XDraw1, YDraw2)
Next XCounter
For YCounter = 0 To NyGrid
XDraw1 = XMin
XDraw2 = XMax
YDraw1 = YMin + YCounter * YStep
PicChart.Line (XDraw1, YDraw1)-(XDraw2, YDraw1)
Next YCounter
'Подписи к осям
CurrentX = PicChart.Left
CurrentY = PicChart.Top - TextHeight(TextY)
Print TextY
CurrentX = PicChart.Left + PicChart.Width + TextWidth("0")
CurrentY = PicChart.Top + PicChart.Height - TextHeight(TextX)
Print TextX
'Подписи к линиям сетки
For XCounter = 0 To NxGrid
ValuePrint = Round(XMin + XCounter * XStep, 2)
CurrentX = PicChart.Left + PicChart.Width * XCounter / NxGrid - TextWidth((ValuePrint)) / 2
CurrentY = PicChart.Top + PicChart.Height + TextHeight("0") / 2
Print ValuePrint
Next XCounter
For YCounter = 0 To NyGrid
ValuePrint = Round(YMax - YCounter * YStep, 2)
CurrentX = PicChart.Left - TextWidth(Abs(ValuePrint)) - TextWidth("00")
CurrentY = PicChart.Top + PicChart.Height * YCounter / NyGrid - TextHeight(ValuePrint) / 2
Print ValuePrint
Next YCounter
'Задание массивов
Call EntryArray(NValue)
'Рисование графиков
PicChart.DrawStyle = vbSolid
PicChart.DrawWidth = 2
For YCounter = 1 To NFunc
'Изменение цветов
Select Case YCounter
Case 1: PicChart.ForeColor = vbRed
Case 2: PicChart.ForeColor = vbBlue
Case 3: PicChart.ForeColor = vbGreen
End Select
'Рисование первой точки
XDraw1 = ArrX(1)
YDraw1 = ArrY(YCounter, 1)
PicChart.PSet (XDraw1, YDraw1)
'Рисование остальных точек
For XCounter = 2 To NValue
XDraw1 = ArrX(XCounter)
YDraw1 = ArrY(YCounter, XCounter)
PicChart.Line -(XDraw1, YDraw1)
Next XCounter
Next YCounter
Erase ArrX, ArrY
End Sub
'Заполнение массивов
Private Sub EntryArray(NX As Integer)
Dim XCounter As Integer
Dim XMin As Currency, XMax As Currency, XStep As Currency, _
XNow As Currency
Dim KardParam As Integer
Dim RoseParamA As Integer, RoseParamM As Currency
'Граничные значения аргумента
XMin = -2 * Pi
XMax = 2 * Pi
XStep = (XMax - XMin) / (NX - 1)
'Выбор функции
Select Case cboName.Text
Case "Фигуры Лиссажу"
'Фигуры Лиссажу
NFunc = 1
ReDim ArrX(1 To NX) As Currency, ArrY(1 To NFunc, 1 To NX)
For XCounter = 1 To NX
XNow = XMin + (XCounter - 1) * XStep
ArrX(XCounter) = Sin(2 * XNow)
ArrY(1, XCounter) = Sin(3 * XNow)
Next XCounter
'Кордиоида (a=1,a=2,a=3)
Case "Кардиоида"
NFunc = 3
ReDim ArrX(1 To NX) As Currency, ArrY(1 To NFunc, 1 To NX)
For XCounter = 1 To NX
XNow = XMin + (XCounter - 1) * XStep
KardParam = 1
ArrX(XCounter) = Cos(XNow) * 2 * KardParam * (1 + Cos(XNow))
ArrY(1, XCounter) = Sin(XNow) * 2 * KardParam * (1 + Cos(XNow))
KardParam = 2
ArrY(2, XCounter) = Sin(XNow) * 2 * KardParam * (1 + Cos(XNow))
KardParam = 3
ArrY(3, XCounter) = Sin(XNow) * 2 * KardParam * (1 + Cos(XNow))
Next XCounter
'Розы (a=1,m=5/3)
Case "Розы"
NFunc = 1
ReDim ArrX(1 To NX) As Currency
ReDim ArrY(1 To NFunc, 1 To NX) As Currency
For XCounter = 1 To NX
XNow = XMin + (XCounter - 1) * XStep
RoseParamA = 1
RoseParamM = 5 / 3
ArrX(XCounter) = Cos(XNow) * RoseParamA * Sin(RoseParamM * XNow)
ArrY(1, XCounter) = Sin(XNow) * RoseParamA * Sin(RoseParamM * XNow)
Next XCounter
End Select
End Sub
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.