Центр СПО образовательных учреждений Мурманской области
Главное меню | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Динамическое создание объектов на форме |
Автор Олег Ляш | |
23.05.2011 г. | |
Сегодня мы попробуем написать программу, которая в очень приближенной форме моделирует поведение молекул газа в закрытом сосуде. Для простоты реализации будем считать что молекулы летят с постоянной скоростью и отталкиваются только от стенок сосуда (т.е. в рамках нашей задачи мы пренебрегаем соударениями между молекулами и считаем что они движутся только в 2-х измерениях).
Для реализации собственно молекул было решено взять стандартный компонент TShape в виде круга. По умолчанию объекты данного типа не имеют свойств для хранения величин скорости смешения по оси OX и OY. Для решения этой проблемы построим свой собственный класс (TMyShape) на основании TShape с добавлением свойств SX и SY, которые будут использоваться для хранения величин смещения по осям OX и OY соответственно. Сегодня мы попробуем написать программу, которая в очень приближенной форме моделирует поведение молекул газа в закрытом сосуде. Для простоты реализации будем считать что молекулы летят с постоянной скоростью и отталкиваются только от стенок сосуда (т.е. в рамках нашей задачи мы пренебрегаем соударениями между молекулами и считаем что они движутся только в 2-х измерениях). Для реализации собственно молекул было решено взять стандартный компонент TShape в виде круга. По умолчанию объекты данного типа не имеют свойств для хранения величин скорости смешения по оси OX и OY. Для решения этой проблемы построим свой собственный класс (TMyShape) на основании TShape с добавлением свойств SX и SY, которые будут использоваться для хранения величин смещения по осям OX и OY соответственно.
В нашей задачи молекулы сталкиваются только со стенками сосуда, который является прямоугольником. Т.о для описания поведения молекул достаточно будет построить условные конструкции, описывающие столкновение с каждой из стенок сосуда. В качестве примера опишем столкновение с верхней границей сосуда: Если верхняя граница молекулы >= верхней границы сосуда, то изменить направление движения. Но этого недостаточно, если молекула будет двигаться со скоростью отличной от 1, то может возникнуть такая ситуация, когда молекула как бы выехала за верхнюю границу сосуда. Чтобы решить эту проблему достаточно добавить в условную конструкцию не только изменения направления движения, но и принудительную установку объекта около верхней границы. Столкновение с остальными границами описывается аналогичным образом. Кроме этого в нашей программе будет происходить динамическое создание объектов, для этого используется метод Create у созданного нами класса TMyShape. Создание объектов будем проводить в обработчике событий FormCreate.
Обработка движения объектов и анализ столкновения будет происходить в обработчике событий Timer. Перебор всех компонент типа TMyShape будем производить с помощью циклической конструкции по всем компонентам на форме. Но так как на форме могут присутствовать и другие компоненты, то нам следует проверить является ли очередной компонент нужного типа. Это можно сделать с помощью конструкции (Components[i] is TMyShape), которая возвращает истинное значение, если компонент является указанного типа.
Исходных код программы
|
« Пред. | След. » |
---|