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

Тема в разделе "Visual Basic", создана пользователем flayve, 15 янв 2011.

  1. flayve

    flayve Гость

    Здравствуйте, уважаемые друзья! Прошу Вас, помогите пожалуйста в решении проблемы: программа вычисляет значение перемещения (sum1, то есть точка пересечения с осью OX, соответственно sum1/2 - значение х для вершины) и максимальное значение высоты (height1 - значение у вершины), которые вычисляются следующим программным кодом:
    Код (LotusScript):
    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). Соответственно с каждым изменением каждого параметра должен строится новый график, с учётом того, что предыдущие вычисление и построения удаляются нажатием кнопки "Сброс":
    Код (LotusScript):
    Private Sub clean_Click()
    speed.Text = ""
    time.Text = ""
    degree.Text = ""
    sum.Text = ""
    hei.Text = ""
    work.Cls
    End Sub
    Я нашёл программы построения простой параболы:
    Код (LotusScript):
    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 )
     
  2. flayve

    flayve Гость

    Итог таков, но график не рисует.. Что делать??? Помогите, пожалуйста!
    Код (LotusScript):
    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
     
  3. alex77755

    alex77755 Well-Known Member

    Регистрация:
    15 фев 2009
    Сообщения:
    128
    Симпатии:
    0
    Это весь код?
    А кто будет запускать процедуру строительства?
    Вызови процедуру из процедуры нажатия кнопки и будет тебе счастье.
    Строится там парабола, только координаты и масштаб плохо рассчитаны и связаны
    ------------------
    work_Paint
    End Sub

    Private Sub work_Paint()
    ----------------------------
     
  4. flayve

    flayve Гость

    Код (LotusScript):
    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
    помогли с формулой параболы но объединить с первой частью всё равно не удаётся!!!... Подскажите пожалуйста!!! Вопрос жизни и смерти
     
Загрузка...
Похожие Темы - Помогите пожалуйста созданием
  1. limbra
    Ответов:
    3
    Просмотров:
    44
  2. uxbmw3w
    Ответов:
    0
    Просмотров:
    62
  3. GREED
    Ответов:
    1
    Просмотров:
    534
  4. Рая
    Ответов:
    3
    Просмотров:
    788
  5. sonia2000
    Ответов:
    0
    Просмотров:
    960

Поделиться этой страницей