Как построить сплайн по заданным точкам - VB
Формулировка задачи:
Всем добрый день.
У меня возникла такая проблема.
Имеется одномерный массив состоящий из чисел:
-0,18
-0,29
6,47
10,37
17,52
17,79
14,81
10,01
5,82
0
0
-0,35
Для этого массива строится график, но строится он прямыми линиями, получается с острыми углами, есть ли возможность сделать так, чтобы переходы были плавными (округленные). Понятно, что если добавить числа в этот массив можно будет этого добиться, но такой возможности нет. Как быть?
Плюс к выше сказанному, график появляется за доли секунды, хотелось бы чтоб линия графика шла постепенно, я понимаю что это надо связать с таймером, но не знаю как это сделать. Надеюсь на Вашу помощь.
С timer я разобрался, график строится медленно. Остался вопрос с угловатостью графика.
Еще не получается разметку на график нанести, если деления от 1 и выше, то нормально, а если 0.1 или 0.001 не получается, Visual basic виснет сразу, что делать? Код осей графика следующий:
Еще числа ставятся с права по оси OY, а хотелось бы слева. И как можно добавить подпись к осям X и Y
справа*
Решение задачи: «Как построить сплайн по заданным точкам»
textual
Листинг программы
Option Explicit Dim plusX As Single, plusY As Single, minusX As Single, minusY As Single Dim i As Single, Ty, x As Single, Y As Single Dim p As Object Sub Graf() p.DrawWidth = 5: p.DrawStyle = 0: p.ForeColor = RGB(200, 0, 100) For x = 0 To 10 Step 0.001 Y = (Tan(x / 10)) / 1500 p.Circle (x, Y), 0.01 Next x p.ForeColor = vbBlack End Sub Private Sub Command1_Click() plusX = 15: plusY = 0.0015: minusX = -1: minusY = -0.0001 Set p = Form1.Picture1 Settings End Sub Sub Settings() With p .DrawStyle = 0: .FillStyle = 0: .FillColor = vbRed: .DrawWidth = 2 .Cls p.Scale (minusX, plusY)-(plusX, minusY) p.Line (minusX, 0)-(plusX, 0), vbBlue 'ocb X p.Line (0, minusY)-(0, plusY), vbBlue 'ocb Y p.Line (plusX, 0)-(plusX - 0.5, -0.00003), vbBlue 'стрелка на конце оси X p.Line (plusX, 0)-(plusX - 0.5, 0.00003), vbBlue 'стрелка на конце оси X p.Line (0, plusY)-(-0.3, plusY - 0.0001), vbBlue 'стрелка на конце оси Y p.Line (0, plusY)-(0.3, plusY - 0.0001), vbBlue 'стрелка на конце оси Y .DrawStyle = 2: .DrawWidth = 1 ' Пунктирная линия For i = minusY To plusY Step 0.0001 .CurrentX = 0 ' оцифровка .CurrentY = i p.Print Round(i, 5) .DrawWidth = 2 p.Line (-(plusX / 200), i)-((plusX / 200), i) ' засечка .DrawWidth = 1: p.Line (minusX, i)-(plusX, i) Next i .FontBold = True: .FontSize = 14: .CurrentX = 1.5: .CurrentY = plusY - 0.00001: p.Print "Y" ' подписываем ось Y .FontBold = False: .FontSize = 8 For i = minusX To plusX Step 1 .CurrentX = i: .CurrentY = 0 p.Print i p.Line (i, minusY)-(i, plusY) ' засечка .DrawWidth = 2: p.Line (i, -(plusY / 200))-(i, (plusY / 200)) .DrawWidth = 1 Next i .FontBold = True: .FontSize = 14: .CurrentX = plusX - 1: .CurrentY = 0.00015: p.Print "X" ' подписываем ось X .FontBold = False: .FontSize = 8 End With Graf End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д