Помогите пожалуйста с созданием параболы

  • Автор темы flayve
  • Дата начала
F

flayve

#1
Здравствуйте, уважаемые друзья! Прошу Вас, помогите пожалуйста в решении проблемы: программа вычисляет значение перемещения (sum1, то есть точка пересечения с осью OX, соответственно sum1/2 - значение х для вершины) и максимальное значение высоты (height1 - значение у вершины), которые вычисляются следующим программным кодом:
Код:
Dim speed1 As Integer
Dim degree1 As Integer
Dim time1 As Integer
Dim length1 As Currency
Dim height1 As Currency
Dim X1 As Currency
Dim Y1 As Currency
Dim sum1 As Currency
Private Sub start_Click() <кнопка "Пуск!">
time = Val(time.Text)
Y1 = Val(speed.Text) * Sin(Val(degree.Text)): height1 = Y1 ^ 2 / 20
If height1 >= 0 Then height1 = height1: hei.Text = height1 Else: height1 = (-1) * height1: hei.Text = height1
X1 = Val(speed.Text) * Cos(Val(degree.Text)): sum1 = X1 * time
If sum1 >= 0 Then sum1 = sum1: sum.Text = sum1 Else: sum1 = (-1) * sum1: sum.Text = sum1
End Sub
Это математическая часть программы, которая работает. Но мне необходимо, чтобы используя вычисленные значения, программа построила график - параболу с ветвями, направленными вниз, в PictureBox (имя объекта - work). Соответственно с каждым изменением каждого параметра должен строится новый график, с учётом того, что предыдущие вычисление и построения удаляются нажатием кнопки "Сброс":
Код:
Private Sub clean_Click()
speed.Text = ""
time.Text = ""
degree.Text = ""
sum.Text = ""
hei.Text = ""
work.Cls
End Sub
Я нашёл программы построения простой параболы:
Код:
Dim a, b, c
Private Sub Form_Paint()
Dim X As Long
Dim Y As Long
a = 0.05
Cls
ScaleMode = vbPixels
For X = 0 To ScaleWidth
Y = f(X - ScaleWidth / 2)
Y = ScaleHeight - Y
Line -(X, Y)
Next X
End Sub

Function f(X As Long) As Long
f = a * X ^ 2 + b * X + c
End Function

Private Sub Form_Resize()
Refresh
End Sub
Проблема в том, что у меня не получается связать математическую часть с графиком параболы. Нужно, чтобы парабола строилась по вычисленным значениям (как было сказано выше) по нажатию кнопки "Пуск!" и обнулял все значения нажатием на кнопку. Также был бы благодарен, если будут оставаться статичными ось ОХ и ось ОY. Прошу Вас, помогите пожалуйста! (На всякий случай прикрепляю скрин-шот программы form.JPG )
 

Вложения

F

flayve

#2
Итог таков, но график не рисует.. Что делать??? Помогите, пожалуйста!
Код:
Dim speed1 As Integer
Dim degree1 As Integer
Dim time1 As Integer
Dim length1 As Currency
Dim height1 As Currency
Dim X1 As Currency
Dim Y1 As Currency
Dim sum1 As Currency
Dim a, b, c As Long
Dim X As Long
Dim Y As Long
Private Sub start_Click()
time = Val(time.Text)
Y1 = Val(speed.Text) * Sin(Val(degree.Text)): height1 = Y1 ^ 2 / 20
If height1 >= 0 Then height1 = height1: hei.Text = height1 Else: height1 = (-1) * height1: hei.Text = height1
X1 = Val(speed.Text) * Cos(Val(degree.Text)): sum1 = X1 * time
If sum1 >= 0 Then sum1 = sum1: sum.Text = sum1 Else: sum1 = (-1) * sum1: sum.Text = sum1
a = ((-1) * height1 / (sum1 / 2) ^ 2)
b = (2 * height1 / (sum1 / 2))
End Sub
Private Sub work_Paint()
Cls
ScaleMode = vbPixels
For X = 0 To sum1
Y = f(X - sum1 / 2)
Y = height1 - Y
Line -(X, Y)
Next X
End Sub
Function f(X As Long) As Long
f = a * X ^ 2 + b * X
End Function
Private Sub work_Resize()
Refresh
End Sub
Private Sub clean_Click()
speed.Text = ""
time.Text = ""
degree.Text = ""
sum.Text = ""
hei.Text = ""
work.Cls
End Sub
 

alex77755

Well-known member
15.02.2009
128
0
#3
Это весь код?
А кто будет запускать процедуру строительства?
Вызови процедуру из процедуры нажатия кнопки и будет тебе счастье.
Строится там парабола, только координаты и масштаб плохо рассчитаны и связаны
------------------
work_Paint
End Sub

Private Sub work_Paint()
----------------------------
 
F

flayve

#4
Код:
Dim a As Double, b As Double
Private Sub start_Click()
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
x1 = GetNumber("Минимальное значение X", -2)
y1 = GetNumber("Минимальное значение Y", -2)
x2 = GetNumber("Максимальное значение X", 2)
y2 = GetNumber("Максимальное значение Y", 2)
a = GetNumber("Значение A", 1)
b = GetNumber("Значение B", 0)
If x1 = 0 Or y1 = 0 Or x2 = 0 Or y2 = 0 Then Exit Sub

Dim x As Double
Dim y As Double

With work
.Cls
.AutoRedraw = True
.BackColor = vbWindowBackground
.ForeColor = vbWindowText
.ScaleLeft = x1
.ScaleWidth = x2 - x1
.ScaleTop = y1
.ScaleHeight = y2 - y1

.DrawStyle = vbDot
work.Line (0, y1)-(0, y2)
work.Line (x1, 0)-(x2, 0)
.DrawStyle = vbSolid

.CurrentX = x1
.CurrentY = f(x1)
End With
For x = x1 To x2 Step work.ScaleWidth / work.Width
work.Line -(x, -f(x))
Next x
End Sub
Function GetNumber(a As String, Optional DefaultValue As Double = 0)
Dim s As String
s = InputBox(a, "Введите число", DefaultValue)
If Not IsNumeric(s) Or s = "" Then Exit Function
GetNumber = CDbl(s)
End Function
Function f(x As Double) As Double
f = a * x ^ 2 + b * x
End Function
Private Sub clean_Click()
work.Cls
End Sub
помогли с формулой параболы но объединить с первой частью всё равно не удаётся!!!... Подскажите пожалуйста!!! Вопрос жизни и смерти