Построение диаграммы

Диаграмму будем строить таким образом, чтобы получить на ней изображение обоих шариков, положение которых будет зависеть от координат X, находящихся в ячейках В5 и D5; Y, равных 2, а размеры от массы (А5 и С5). В этом случае необходимо выбрать пузырьковую диаграмму, содержащую два ряда. Используя возможности контекстного меню для диаграмм (области диаграммы, области построения, и так далее) создаем внешний вид диаграммы по своему вкусу, но обязательно нужно для оси X минимальное и максимальное значение шкалы установить соответственно 0 и 10, отказавшись от режима «Авто» для этих параметров. Кроме того, необходимо убрать легенду и ось Y. Также можно на диаграмму поместить объект «Надпись» с соответствующим текстом. Другими словами, на данном этапе мы имеем богатые возможности для графического оформления задуманного проекта.

Теперь нужно написать программу, для того чтобы заставить шарики двигаться. Уже сейчас, меняя вручную значения координат шариков или их массы в расчетном блоке (строка 5 таблицы), можно заставить шарики перемещаться по диаграмме или графику или рисунку... (все зависит от оформления).

Шарики должны двигаться

Код будем писать под событие Click. Создаем управляющую (командную) кнопку. Заменим стандартное CommanButtonl на

Фрагмент оформления таблицы

Рис. 3.1. Фрагмент оформления таблицы

слово «Старт», также можно изменить стиль и цвет фона (BackSty-1е и BackColor), тип, размеры и цвет шрифта (Font и ForeColor).

При написании кода в первую очередь позаботимся о том, чтобы данные из ячеек ЭТ попали в переменные программы. Нам нужны начальные координаты шариков. Это ячейки Е2 и F2 (строка 2, столбцы 5 и 6), поэтому две первые строчки будут выглядеть так

xxn1 = Cells(2, 5)

xxn2 = Cells(2, 6)

Теперь определимся со скоростями. Начальные скорости расположены в ячейках В2 и D2. В программе мы их обозначим через переменные dxl и dx2. Координату шарика через промежуток времени t мы будем вычислять в соответствии с известной формулой физики X=Xo+V*t. Полагаем t= 1 /10, и тогда dx = V/10. Получаем следующие две строчки

dx1 = Cells(2, 2)/10

dx2 = Cells(2, 4)/10

Очередные две строчки — это передача начальных координат в текущие координаты —переменные х1 и х2, которые будут использованы в цикле. Возможен вариант и более короткого кода, но мы для доступности сокращать не будем.

х1 = ххп1

х2 = ххп2

Также нам в программе понадобятся и массы. Они располагаются в ячейках А2 и С2, поэтому

ml = Cells(2,1)

m2 = Cells(2, 3)

Теперь начинаем расчет в цикле до 100 раз. Принимаем, что увеличение счетчика на 1 — это увеличение времени на 1/10 с, то есть наблюдаем в течение 10 условных секунд, и при выбранных скоростях и расстояниях такое значение можно считать оптимальным.

For i = 1 То 100

Позаботимся, чтобы шарики не вылетали за стенки. Первый шарик не должен улететь налево и если он приблизился к левой стенке (ее координата равна 0), то его скорость должна поменяться по знаку. Кроме того, чтобы зрительно шарик не «влипал» в стенку, запретим ему приближаться к ней ближе, чем на 0,5. Поэтому

If х1 <= 0.5 Then dx1 = Abs(dx1)

Для второго шарика «опасна» правая стенка с координатой 10 и с учетом «влипания» получаем 9,5

If х2 >= 9.5 Then dx2 = -1 * Abs(dx2)

Следующий шаг — процесс соударения. Это когда первый шарик (левый) приблизился ко второму менее чем на 1 (размеры шариков), то скорости шариков меняются в соответствии с формулами (1) и (2). Попутно заметим, что если мы работаем в системе метры — секунды, то шарики у нас — метровые гиганты. Такой вот бильярд или боулинг!!!

If x1 >=х2-1 Then

а = dx1 ' — это скорость И; перед ударом,

dx1 = (dx1 * (ml - m2) + 2 * dx2 * m2) / (ml + m2)' — это уже Uj

dx2 = a + dx1 - dx2 ' — а это уже U2

End If

Итак, значения скорости тел в случае соударении со стенками или друг с другом определены, теперь находим новые координаты, а если таких событий не было, то тем более пора определить, где же будут шарики через очередные 1/10 с.

х1 = х1 + dx1

х2 = х2 + dx2

Теперь эти значения отправим в ЭТ, чтобы диаграмму изменить. А положение шариков в диаграмме определяется ячейками В и D в пятой строке.

Cells(5, 2) = х1

Cells(5, 4) = х2

Следующая строка кода очень важна. Эта строка дает возможность электронной таблице произвести перерасчет в соответствии с новыми данными, а также перестроить диаграмму (перевод команды — «делай события»)

DoEvents

Завершем цикл

Next i

И вообще

End Sub.

Полностью код выглядит следующим образом

Private Sub CommandButtonl_Click()

xxn1 = Cells(2, 5)

xxn2 = Cells(2, 6)

dx1 = Cells(2, 2)/10

dx2 = Cells(2, 4)/10

x1 = xxn1

x2 = xxn2

ml = Cells(2, 1)

m2 = Cells(2, 3)

For i = 1 To 100

If x1 <= 0.5 Then dx1 = Abs(dx1)

If x2 >= 9.5 Then dx2 = -1 * Abs(dx2)

If x1 >= x2-1#Then

a = dx1

dx1 = (dx1 * (ml - m2) + 2 * dx2 * m2) / (ml + m2)

dx2 = a + dx1 - dx2

End If х1 = х1 + dx1 х2 = х2 + dx2 Cells(5, 2) = x1 Cells(5, 4) = x2 DoEvents Next i End Sub

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >