Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Вычисления визуализация и програмирования в среде MATLAB 5 - Мартынов Н.Н.

Мартынов Н.Н., Иванов А.П. Вычисления визуализация и програмирования в среде MATLAB 5 — Техносфера , 2002. — 333 c.
Скачать (прямая ссылка): vichesleniyevizualizaciyai2002.pdf
Предыдущая << 1 .. 73 74 75 76 77 78 < 79 > 80 81 82 83 84 85 .. 115 >> Следующая

%— Cycle of dynamic graphing: — for i=l:10000 xn=x+dx;
yn=sin(cos(sin(cos (xn))));
X=[x,xn];
Y=[y,yn];
set(h, 1XData1,X,'YData',Y ); x=xn; y=yn; drawnow; end
Здесь быстрое первичное рисование определяется тем, что ранее нарисованные порции графика исключаются из текущего содержимого (то есть из свойств XData и YData) объекта line. Эти порции остаются в пределах графического окна в виде картинки, то есть набора пикселов, но уже не являются содержимым графического объекта line. Можно так образно выразиться, что мы графическим объектом line скользим вдоль строящейся кривой. В результате чего и достигается быстрое первичное построение, но становится невозможной перерисовка.
Все представленные способы запрограммировать задачу о динамическом построении графика функции имеют как достоинства, так и недостатки. В разных конкретных случаях можно предпочесть тот или иной из них.
Вращение трехмерных графиков
Ранее в гл. 2 мы строили красивые, но статичные трехмерные графики (графики вещественных функций двух переменных). Наглядность визуального представления таких графиков только усилится, если осуществить их динамическое вращение вокруг некоторой оси. Тогда создастся полное впечатление, что мы осматриваем поверхность графика функции с разных сторон.
Осуществить такое вращение в системе MATLAB очень просто, так как существует специально предназначенная для этого функция rotate. Эта функция осуществляет однократное вращение графического объекта с описателем Н на угол ALPHA вокруг заданной оси вращения. Ось вращения можно задать либо двумя углами ТНЕТА и PHI (сферические координаты), либо тремя декартовыми

I лава /. I |римеры конкретных разраооток М-функиий
координатами X, Y, Z вектора этой оси. В обоих случаях ось вращения проходит через начало координат. Поясним дополнительно, что угол PHI задает угол возвышения над плоскостью ху, а угол ТНЕТА есть угол между проекцией вектора направления вращения на плоскость ху и положительным направлением оси х.
Итак, существуют два основных шаблона вызова функции rotate:
rotate( Н, [ТНЕТА,PHI], ALPHA )
rotate( Н, [X,Y,Z], ALPHA )
Если вводить эти выражения с клавиатуры и выполнять их нажатием клавиши Enter, то отрисовка (визуальное вращение) будет производиться немедленно. Если же эти выражения выполняются в порядке своей очереди из текста М-функции, то для немедленной перерисовки графического окна требуется осуществить вызов функции drawnow (не забывайте об этом).
Вот простейший пример пользовательской функции, которая, опираясь на системную функцию rotate, осуществляет достаточно длительное непрерывное вращение графика функции peaks относительно вертикальной оси:
function MyRotatel( speed, time, w, h )
figure('Units1,1 Pixels','Position', [100,100,w,h]);
[X,Y,Z] = peaks (30);
hS = surfl(X,Y,Z); shading interp; colormap(copper);
for i=l:time
rotate ( hS, [0, 0, 1], speed ); drawnow;
end
Здесь параметр speed задает угол единичного дискретного вращения, осуществляемого системной функцией rotate, что при непрерывном вращении выглядит как скорость такого вращения. Параметр time задает длительность показа, а параметры w и h - размеры графического окна. Всегда можно подобрать входные параметры функции MyRotate так, чтобы вращение получилось достаточно плавным и наглядно демонстрировало бы график функции двух вещественных переменных со всех сторон.
Например, на дисплее компьютера с разрешением 1024x768 неплохой результат получается в случае
MyRotatel( 10, 100, 300, 300 );
так как при этом достигается достаточно плавный показ вращающегося графика. Отдельный кадр этого «ролика» показан на рис. 7.9.
Еще более плавного показа вращения графика можно добиться, если промежуточные кадры записывать с помощью функции getframe в предварительно выделенный для этого буфер в памяти компьютера, а потом осуществлять максимально плавный показ функцией movie, которой можно даже указать темп
MATLAB 5.x. Вычисления, визуализация, программирование
229
показа (количество кадров в секунду). Всю эту работу выполняет функция
MyRotate2:
function MyRotate2( speed, time, w, h )
figure('Units','Pixels','Position',[100,100,w,h]);
[X, Y, Z] = peaks(30);
hS = surf1(X,Y,Z); shading interp; colormap(copper);
Buf = moviein(time);
%— prepare frames for film -------------
for i=l:time
rotate( hS, [0, 0, 1], speed ); Buf(:,i)=getframe; end
%— show film 10 times with 30 fr/sec movie( Buf, 10, 30 ); clear Buf;
'4 Finurp No 1
File Edit Window Help
-5 -5
Рисунок 7.9
Очень плавный показ со скоростью 30 кадров в секунду (при наличии достаточно хорошего видеоадаптера) осуществляется следующим вызовом функции MyRotate2:
MyRotate2( 5, 72, 300, 300 );
где мы задаем дискретный шаг вращения в 5 просчитываем все кадры для одного полного оборота (72 раза по 5 °), после чего 10 раз подряд прокручиваем полученный «ролик».
Глава 8
Программирование функций на языке С
Интерфейс МЕХ-функиий с системой MATLAB
Когда стоящую перед нами задачу не удается решить с помощью функций, встроенных в систему MATLAB, приходится разрабатывать собственные функции. Разработка ведется на некотором языке программирования. До сих пор нами разрабатывались функции на М-языке - внутреннем языке программирования пакета MATLAB. Код М-функций, как известно, сохраняется в текстовых файлах, имеющих расширением букву ш. Именно в таком состоянии эти функции готовы к применению: система MATLAB загружает их в память, преобразовывает в некоторый промежуточный псевдокод (Р-код), который уже и выполняется далее в режиме интерпретации, когда каждая синтаксически законченная конструкция P-кода заменяется на соответствующий набор машинных инструкций.
Предыдущая << 1 .. 73 74 75 76 77 78 < 79 > 80 81 82 83 84 85 .. 115 >> Следующая