Как построить сплайн по заданным точкам - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы