Вычисление времени сжатия пружины под воздействием упавшего груза
Далее, в процедуре используется одна локальная переменная (i) для записи оператора цикла и пять глобальных переменных. Подразумевается, что эти временные задаются вне процедуры до ее вызова. Назначение глобальных переменных таково: переменная х0 определяет координату оси пружины (по горизонтали), переменная Xmin определяет координату (по вертикальной оси) eгo стационарного конца пружины, N задает число витков пружины, 1 – шу пружины в свободном состоянии и s – ее толщину в процентном отношении от длины 1.
Первой командой в процедуре координате нижнего конца пружины присваивается значение, равное длине свободной пружины, но только со знаком минус. Это следствие того, что начало координатной оси совпадает со свободным концом несжатой пружины.
Далее картинку будем отображать квадратной – ее размеры по вертикали и горизонтали будут совпадать (однако заранее они неизвестны). По горизонтали отсчет будет начинаться с 0. Пружину разместим посредине. Поскольку размер рисунка по горизонтали (и вертикали) равен Xmax-Xmin, ось пружины будет иметь координату (Xmax-Xmin)/2. Последней командой в теле процедуры является plot().
Первым параметром этой процедуры, определяющим отображаемую структуру, является команда формирования последовательности seq(), заключенная в квадратные скобки. Этой командой формируется последовательность точек, определяющая пружину. Горизонтальная координата каждой такой точки формируется поочередным добавлением/отниманием от координаты оси пружины х0 половинной толщины пружины. Поскольку параметр s определяет толщину пружины в процентах к ее длине 1, непосредственно толщина пружины равна s*1/100 (половинная толщина отсюда равна s*1/200). Множитель (-1)*(i+1) нужен для чередования знаков "плюс" и "минус" при определении координаты.
Поскольку пружина состоит из N витков, в боковой проекции это соответствует N "зубцам", а значит, 2*N отрезкам, соединяющим угловые точки. Таким образом, на каждом шаге (при увеличении переменной i на единицу) вертикальная координата угловой точки должна увеличиваться на величину L(t)/(2*N), где L(t) – длина пружины в момент времени t. Начальной должна быть точка с координатой Xmin, конечной – точка с координатой Xmin+L(t). Из этих условий выбирается множитель (i-1) и диапазон изменения параметра (i=1..2*N+1).
Параметрами процедуры plot() указаны диапазон отображения по горизонтали (0..Xmax-Xmin), вертикали (Xmin..Xmax), а также цвет пружины (синий) и толщина линии.
Внимание!
Выше в качестве отображаемой процедурой plot() структуры указан список точек. Поскольку по умолчанию значение опции style равняется LINE, отображаемые точки будут соединены ломаной линией строго в порядке их следования в списке. Таким образом, задаем только точки, а получаем – пружину. Чтобы отображались исключительно точки, следует указать style=POINT.
Теперь определим процедуру Sys_display(), которая будет отображать пружину вместе с шариком, и в этой процедуре будет использоваться описанная выше процедура отображения пружины spring ().
Параметрами процедуры Sys display() являются:
- а) функциональная зависимость длины пружины от времени L;
- б) зависимость высоты, на которой находится шарик, от времени h (это оператор, как и L);
- в) зависимость скорости шарика от времени V1 (зачем это нужно, объясняется ниже);
- г) момент времени t, в который отображается вся система.