'Сетка
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