- •Применение информационных технологий при решении задач теоретической механики кинематика точки
- •191028, С.-Петербург, ул. Моховая, 26
- •Введение
- •Начало работы над программой
- •Проект программы для обработки массивов значений координат и времени
- •Составление программы на основе обработки символьных выражений
- •Листинг простейшей программы
- •Движение точки по пространственной кривой
- •Анимация
- •Дополнительные задания
- •Заключение
- •Список литературы
Листинг простейшей программы
%task_k1: evaluate the path, veloc. and accel.
%for given x(t),y(t),t1
clear all
syms x y t;
novar = input('Task K.1 Введи номер варианта = ');
x = input('Введи x = ');
y = input('Введи y = ');
t1 = input('Введи момент t1 = ');
mv = input('Введи масштаб изображения скорости mv = ');
ma = input('Введи масштаб изображения ускорения ma = ');
tedge = input('Введи правую границу промежутка tedge = ');
if t1>tedge
tedge = 2*t1;
end%if t1
ezplot(x,y,[0,tedge]), axis equal, hold on;
t = t1;
x1 = subs(x); y1 = subs(y);
plot(x1,y1, 'ko'), hold on;
vx = diff(x); vy = diff(y);
ax = diff(vx); ay = diff(vy);
vx1 = subs(vx); vy1 = subs(vy);
ax1 = subs(ax); ay1 = subs(ay);
v1 = sqrt(vx1*vx1+vy1*vy1);
a1 = sqrt(ax1*ax1+ay1*ay1);
quiver(x1, y1, vx1*mv, vy1*mv, 'g'); hold on;
quiver(x1, y1, ax1*ma, ay1*ma, 'r'); hold off;
if v1>0.000001
at1 = (vx1*ax1+vy1*ay1)/v1;
an1 = sqrt((a1+at1)*abs(a1-at1));
if an1<0.000001
ro1=Inf;
else
ro1 = v1*v1/an1;
end%if an1
else
at1 = Nan;
an1 = Nan;
ro1 = Nan;
end%if v1
no_var = novar
vx1_vy1_v1 = [vx1 vy1 v1]
ax1_ay1_a1 = [ax1 ay1 a1]
at1_an1_ro1 = [at1 an1 ro1]
Сохраняем программу (save as) под именем, скажем, task_k1. Набираем и запускаем команду <task_k1> в командном окне. В этом же окне отобразятся результаты счета, а
8
в графическом окне – соответствующая фигура. Используя инструменты этого окна, можно вставлять надписи, менять толщину и цвет линий и проч.
Замечания к составлению листинга.
1) На одной строке могут находиться несколько команд.
2) Если команда не умещается в одну строку, ставим многоточие «…» и переносим команду на другую строку.
3) Некоторые (не вычисляемые) команды можно заканчивать запятой или пробелом.
Движение точки по пространственной кривой
Дополним нашу программу введением третьей координаты , а также обращением к функциям ezplot3, plot3 и quiver3. Получим возможность строить пространственные кривые. Введем еще команду на установку начальной точки визирования объекта и заключения его в коробку (бокс):
…
ezplot3(x,y,z,[0,tedge]), axis equal,
xlabel('\itx'), ylabel('\ity'), zlabel('\itz'),
view(210,30), box on, hold on;
…
На рис. 1 изображена пространственная траектория, а на рис. 2 - ее проекции. Картинку в МАТЛАБе можно поворачивать, раскрашивать, вводить надписи и т.д.
Рис. 1. Пространственная замкнутая кривая
Рассмотрим еще одну модернизацию процедуры task_k1. Добавим построение вектора (здесь - орт касательной) и вектора . Добавляем
9
надписи методами дескрипторной графики. Команда text(x1+vx1*mv,y1+vy1*mv,'v') создает на фигуре текстовую строку 'v', левый нижний угол которой имеет координаты x1+vx1*mv, y1+vy1*mv.
Анимация
Организуем простейшую анимацию, иллюстрирующую движение точки по плоской кривой. Создаем цикл для расчетов и построения объектов в 41 расчетной точке, включая . Задержку кадров во времени заказываем командой pause. Чтобы стирать лишние объекты при переходе к следующему кадру, помечаем их вектором ссылок hp, и после любования стрелками стираем их все одной командой delete(hp). Стрелки, относящиеся к моменту , оставляем. Еще оставляем маркер в виде кружка, выделяющего начальную точку траектории.
Рис. 2. Горизонтальная проекция пространственной кривой на и одна из проекций на вертикальную плоскость
%Task K1v2: evaluate the path, veloc. and accel.(version 2)
%for given x(t),y(t) and animation in 41 points
clear all
syms x y t;
novar = input('task_k1v2 Введи номер варианта = ');
x = input('Введи x = ');
y = input('Введи y = ');
t1 = input('Введи момент t1 = ');
tedge = input('Введи правую границу промежутка tedge = ');
if t1>tedge
tedge = 2*t1;
end%if t1
mv = input('Введи масштаб изображения скорости mv = ');
ma = input('Введи масштаб изображения ускорения ma = ');
ezplot(x,y,[0,tedge]), axis equal, hold on;
pause(0.5);
dt = t1/20;
10
vx = diff(x); vy = diff(y);
ax = diff(vx); ay = diff(vy);
for k = 1:41
t = dt*(k-1);
x1 = subs(x); y1 = subs(y);
hold on;
hp(1) = plot(x1,y1,'ko','MarkerSize',5,'MarkerFaceColor','k'); hold on;
if k==1
plot(x1,y1,'ko','MarkerSize',8); hold on;
end% if k
vx1 = subs(vx); vy1 = subs(vy);
ax1 = subs(ax); ay1 = subs(ay);
v1 = sqrt(vx1*vx1+vy1*vy1);
a1 = sqrt(ax1*ax1+ay1*ay1);
hp(2) = quiver(x1, y1, vx1*mv, vy1*mv,'b','LineWidth',1.5); hold on;
hp(3) = text(x1+vx1*mv,y1+vy1*mv,'v'); hold on;
hp(4) = quiver(x1, y1, ax1*ma, ay1*ma,'r','LineWidth',2); hold on;
hp(5) = text(x1+ax1*ma,y1+ay1*ma,'a'); hold on;
if v1>1e-12
at1 = (vx1*ax1+vy1*ay1)/v1;
an1 = sqrt((a1+at1)*abs(a1-at1));
atx1 = at1*vx1/v1;
aty1 = at1*vy1/v1;
anx1 = ax1 - atx1;
any1 = ay1 - aty1;
hp(6) = quiver(x1, y1, atx1*ma, aty1*ma,'r','LineWidth',2); hold on;
hp(7) = text(x1+atx1*ma,y1+aty1*ma,'a_t'); hold on;
hp(8) = quiver(x1, y1, anx1*ma, any1*ma,'r','LineWidth',2); hold on;
hp(9) = text(x1+anx1*ma,y1+any1*ma,'a_n');
if an1<1e-12
ro1=Inf;
else
ro1 = v1*v1/an1;
end%if an1
else
at1 = Nan;
an1 = Nan;
ro1 = Nan;
end%if v1
pause(0.5);
if k==21
Vx1 = vx1; Vy1 = vy1; V1 = v1;
Ax1 = ax1; Ay1 = ay1; A1 = a1;
At1 = at1; An1 = an1; Ro1 = ro1;
else
delete(hp);
end%if k
end%for k
no_var = novar
vx1_vy1_v1 = [Vx1 Vy1 V1]
ax1_ay1_a1 = [Ax1 Ay1 A1]
at1_an1_ro1 = [At1 An1 Ro1]
Вместо пауз можно ввести звуковые сигналы заданной длительности с помощью команды sound. Попробуйте ввести звуковое сопровождение: сначала в виде простых гармонических «нот», исполняемых при построении очередной фигуры. Заставьте точку прыгать по траектории в одном ритме с вашей любимой музыкальной пьесой. Точку можно представить смайликом с подвижной физиогномикой, наделенным способностью издавать политкорректные восклицания назидательного характера, восхваляющие автора программы, факультет и всяческое начальство.
11