Исходник программы, показывающей пример исследования систем моделирования витой пружины с грузом, свисающим с нее, когда мы толкаем ее или растягиваем и отпускаем. Движение «системы» анимировано (пружина отпружинивает относительно массы груза).
Физика: благодаря Иссаку Ньютону мы знаем, что если мы подвешиваем груз на пружине, то он просто висит там (1-й закон). Но нам также понадобится его 2-й закон (ускорение пропорционально приложенной силе и обратно пропорционально его массе, A = F / M).
Чтобы заставить нашу систему двигаться, мы рассмотрим два начальных условия: начальное растяжение, X0, приложенное к пружине, и / или начальное нажатие или усилие, F0, приложенное к той же пружине.
Как только мы приведем нашу пружинную массу в движение, нам нужно вычислить смещение как функцию времени Х = f (t). Для этого нам нужно беспокоиться о том, как быстро движется масса - о скорости, которая, в свою очередь, зависит от того, насколько быстро скорость меняется с течением времени (об ускорении). С математической точки зрения это включает дифференциальное уравнение. Для наших целей нам не нужно беспокоиться о производных или интеграции (даже если мы неявно будем использовать и то, и другое). Движение нашего веса вверх и вниз контролируется четырьмя основными факторами: силой тяжести, массой, постоянной пружины и демпфированием.
- Гравитация тянет вниз с силой, пропорциональной массе. В соответствии с уравнением F = MG.
- Сама по себе пружина прикладывает силу, пропорциональную тому, насколько она растянута - растяните ее вдвое дальше, и она тянет вдвое сильнее, пытаясь вернуться в равновесие. Обратите внимание, что эта сила всегда противодействует смещению. Другими словами -F / X = K или F = -KX. K называется жесткостью пружины, поскольку это свойство конкретной используемой пружины.
- Есть другие силы, пытающиеся остановить пружину, когда она движется. Трение воздуха препятствует движению, существует внутреннее трение между молекулами пружины и может быть внешний демпфер, препятствующий движению. Все это можно объединить в константу, называемую коэффициентом демпфирования C. Сила также противоположна направлению движения и пропорциональна скорости движущейся массы. Итак, -F / V = C или F = -CV. Обратите внимание, что когда система находится в состоянии покоя (V = 0), демпфирующая сила отсутствует.
Эти шесть параметров дают нам достаточно информации, чтобы привести нашу массу в движение и предсказать, как она будет двигаться. На практике цикл анимации предполагает приращение на одну единицу времени каждый раз. С некоторыми упрощающими предположениями новое расстояние X увеличивается на скорость V (X = X + V). Скорость изменяется на величину ускорения A (V = V + A). И, наконец, ускорение зависит от сил, действующих на массу, как описано выше. Вот где нам нужен 2-й закон Ньютона, A = F / M. Все наши силы действуют в одном направлении (вертикальном), поэтому мы можем просто сложить их: A = (MG-KX-CV) / M или A = G- (KX + CV) / M. Когда вы изучите код, вы увидите эти три уравнения для X, V и A как основу цикла. Все остальное - детали.
Код определяет объект TSpring как потомок TPanel. Timage, содержащийся в TSpring, является холстом для рисования. Предусмотрены методы для рисования изображения пружины и массы заданной длины и его стирания. Метод Animate содержит цикл, описанный выше, для вычисления новой длины, стирания старого и отрисовки нового изображения на каждом шаге. Большая часть оставшейся части кода получает параметры из полей редактирования и гарантирует, что они являются действительными числами.