Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Usov_PrimInfTekhn_KinTochki.doc
Скачиваний:
12
Добавлен:
22.03.2016
Размер:
224.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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]