Рисуем — Бросок камня

По условию задачи «Полёт камня»

«Полет камня». Это непростое задание разделим на два этапа:
Вычислительная часть. Если камень бросить горизонтально со 100-метровой башни со скоростью v=20м/с, то его расстояние от башни по горизонтали s будет выражаться формулой s=vt, где t – время полета камня в секундах. Высота над землей h будет выра-жаться формулой h=100-9.81t2/2. Требуется вычислять и печатать t, s и h для значений t = 0, 0.2, 0.4, 0.6 и так далее до тех пор, пока камень не упадет на землю.
Графическая часть (выполнять только в том случае, если получилась вычислитель-ная). Нарисовать землю, башню и траекторию камня (Рис. 8.1). Указание: Траектория – серия кружочков. За одну итерацию цикла рисуется один кружочек. Высота башни – 100 пикселей. И в остальном тоже выберем масштаб – 1 метр – 1 пиксель, что удобно. Гори-зонтальная координата кружка на форме – это s с небольшим сдвигом вправо, так как бросаем не от левого края формы. Вертикальная координата кружка на форме – это 100-h с небольшим сдвигом вниз, так как бросаем не от верхнего края формы. Переменная h взята со знаком минус потому, что вертикальная ось в компьютерной системе координат направлена вниз.

Моё решение было такое

Public Class Form1
    'формула броска s=vt, где t - это скорость полёта в секундах v=20m/c
    's - расстояние от башни  по горизонтали
    'h- высота расстояния над землёй h=100-9.81*t^2/2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim h As Single ' будет top
        Dim s As Single ' будет left
        Dim t As Single = 0.0 ' время полёта камня в секундах
        Dim graf As Graphics
        graf = Me.CreateGraphics
        graf.FillRectangle(Brushes.Brown, 0, 20, 20, 100) 'рисуем башню
        graf.DrawLine(Pens.Black, 0, 120, Me.Width, 120) 'рисуем землю
        Do While h < 120
            t += 0.2 'промежуток времени (цикл)
            s = 20 * t ' вычисляем на каком расстояние от башни будет камень за определённый промежуток времени
            h = 20 + 9.81 * ((t ^ 2) / 2) 'определение высоты камня за определённый промежуток времени            
            Debug.WriteLine(t & " " & s & " " & h) ' можно удалить, нужно было для проверки правильности решения уравнения
            graf.DrawEllipse(Pens.Black, s, h, 2, 2)
        Loop
    End Sub
End Class

 

  1. Решение задачи началось с проверки правильности выполнения уравнения, для этого мне понадобился debug.writeline()
  2. Если использовать уравнение с книги, то камень улетал бы вверх т.е (100, 99, 98 и т.д) от 100 и до 0 (по системе координат в vb.net , 0 — это вверх 100 это ниже)Поэтому изначальна взяты координаты вершины башни по Top (0+20) и дальнейшее выражение прибавлялось, в итоге камень летел вниз, как и нужно по условия задачи.
  3. После того, как формула заработала, написал графику. Так как перерисовывать башню и землю не требуется, вынес их за пределы цикла. Цикл выполняется, пока верно условие, то есть пока камень не достигнет поверхности земли. Земля по top 100(высота башни) + 20 (отступ от вехней границы формы)=120

Скачать программу: Бросок камня
Установки не требует.
Файл exe. Размер 20kb.
На компьютере должен быть установлен net.framework 3.5 и выше.

Внимание!!! На некоторых компьютерах, у меня к примеру, система не даёт запускаться файлам с расширением .Exe . Всё просто, эти файлы исполняемые, и система их блокирует, как и любой файл Exe от сторонних разработчиков. В моих программах вирусов нет, можно проверить на любом сайте онлайн проверки на вирусы, или сам файл антивирусником. Если вы всё равно остерегаетесь, то используйте сам код программы в Visual Studio.net 2008

Запись опубликована в рубрике Мои программы, Решение заданий vb.net. Добавьте в закладки постоянную ссылку.