WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 |
Министерство общего и профессионального образования Российской Федерации Уфимский государственный авиационный технический университет Кафедра технической кибернетики МЕТОДИЧЕСКИЕ УКАЗАНИЯ для курсового проектирования по курсу "Информатика" для подготовки инженеров по специальностям 210100 "Управление и информатика в технических системах" и 210300 "Роботы и робототехнические системы" Уфа 1996 2 Составитель: О.В. Трушин УДК 681.3 Методические указания для курсового проектирования по курсу "Информатика" для подготовки инженеров по специальностям 210100 "Управление и информатика в технических системах" и 210300 "Роботы и робототехнические системы" /Уфимск. гос. авиац. техн. ун-т; Сост. О.В. Трушин. Уфа. 1996, - 39 с.

Приведены типовые задания для курсового проектирования с ориентацией на решение основных проблем при составлении и программировании вычислительных и демонстрационно-обучающих алгоритмов. Рассмотрен ряд методик и принципов создания программ с визуализацией, в том числе и динамической, перерабатываемой в программе информации. Приводимые алгоритмы реализованы на языке Turbo-Pascal_7 и могут быть легко адаптированы для других систем программирования.

Библ.: 14 наимен.

Рецензенты: А. Ю. Хасанов М. Е. Сидоров 3 Содержание Стр.

Общие сведения.......................................................................... 4 1. Построение графиков функций и траекторий движения.............. 7 1.1. Построение графика функции Y=F(X) с масштабированием по осям координат..................................................................... 7 1.2. Построение графика функции, заданной в параметрической форме Y=FY( t), X=FX( t)........................................................ 10 1.3. Построение траекторий движения............................................. 10 Перечень тем курсового проектирования по разделу № 1......... 13 2. Приемы создания динамичных графических образов................. 2.1. Перерисовывание объекта........................................................ 2.2. Плавная модификация контурного изображения..................... 2.3. Мультипликация с запоминанием части экрана...................... 2.4. Мультипликация с чередованием видеостраниц..................... 2.5. Управление движением образа................................................. Перечень тем курсового проектирования по разделу № 2.......... 3. Численные методы в вычислительных расчетах........................... 3.1. Численное решение уравнений.................................................. 3.2 Численный расчет интегралов................................................... 3.3. Сортировка одномерных массивов........................................... Перечень тем курсового проектирования по разделу № 3.......... 4. Аффинные преобразования координат при моделировании динамики объектов...................................................................... Перечень тем курсового проектирования по разделу № 4.......... Список литературы...................................................................... Общие сведения Предлагаемые в пособии задания ориентированы на освоение приемов и методов визуального отображения значимой информации, перерабатываемой в типовых программах. Графика применяется практически во всех серьезных программных разработках, так как позволяет отобразить сущность решаемой задачи и увидеть результаты расчетов в виде чертежей, графиков, иллюстраций в движении.

Приводимые ниже алгоритмы реализованы с использованием библиотеки графических функций Borland в среде Turbo-Pascal.

Используются следующие типовые графические процедуры и функции:

InitGraph(Gd,Gm,'way') - переход к графическому режиму (инициализация графики), где Gd - имя графического драйвера, Gm - номер графического режима монитора, 'way' - дорожка DOS к файлам с графическими драйверами (*.bgi).

Обычно драйверы подключаются в режиме автоопределения используемого монитора ПК. Для этого перед инициализацией графики задается Gd:= Detect (или Gd:= 0). В этом случае по умолчанию устанавливается режим с наибольшим числом точек на экране, а значение параметра "Gm" игнорируется.

Номер наибольшего режима для текущего драйвера возвращает функция GetMaxMode. Изменить режим можно процедурой SetGraphMode(Gm). Экран при этом очищается.

Разрешающую способность для текущего графического режима можно определить функциями, возвращающими максимальные значения координат экрана:

GetMaxX - по оси Х; GetMaxY - по оси Y.

Для возврата из графического режима в текстовый можно использовать операторы:

CloseGraph - полное прекращение работы графической системы;

RestoreCrtMode - переключение в текстовый режим с возможностью возврата к текущим установкам графического режима (оператором SetGraphMode).

Очистить графический экран можно процедурой ClearDevice (без изменения установленных параметров) либо GraphDefaults (устанавливаются параметры, принятые по умолчанию).

Процедуры рисования.

SetBkColor( N) - установить цвет N для пикселов фона.

SetColor( N) - установить цвет N для выводимых линий.

PutPixel(X, Y, N) - высветить цветом N пиксель с координатами X,Y.

GetPixel(X, Y) - определить цвет пиксела с координатами X, Y.

- окружность с центром X, Y радиуса R.

Circle(X, Y, R) Arc(X,Y, A1,A2, R) - дуга окружности.

Ellipse(X,Y, A1,A2, RX,RY) - сектор эллипса с полуосями RX,RY.

A1, A2 - начальный и конечный углы (в градусах), отсчитываемые против часовой стрелки относительно оси Х.



Line(X1,Y1, X2,Y2) - отрезок прямой от точки с координатами X1,Y1 к точке с координатами X2,Y2.

LineTo(X, Y) - отрезок прямой от текущего положения курсора до точки X,Y.

LineRel(dX, dY) - отрезок прямой от текущего положения курсора до точки, смещенной на расстояние dX,dY.

В отличие от процедуры Line процедуры LineTo и LineRel при своем исполнении перемещают текущий указатель. Перемещать курсор без рисования можно процедурами MoveTo(X, Y) и MoveRel(dX,dY). В графическом режиме курсор невидим, а его положение можно определить функциями, возвращающими значения координат: GetX - по оси Х, GetY - по оси Y.

Rectangle(X1,Y1, X2,Y2) - прямоугольник с левым верхним углом в точке X1,Y1 и правым нижним углом в точке X2,Y2 (стороны параллельны краям экрана ).

Процедуры построения заполненных фигур Граница заполняемых фигур рисуется текущим цветом для линий. Цвет N и стиль заполнения P (орнамент) можно устанавливать из стандартного набора BGI или определять самим процедурой SetFillStyle(P, N).

Bar(X1,Y1, X2,Y2) - прямоугольник;

Bar3d(X1,Y1, X2,Y2, d, t) - параллелепипед с заполненной передней гранью (координаты углов грани X1,Y1, X2,Y2) глубиной d.

Переменная t типа boolean задает вывод верхней грани. При t=TopOn (true) верхняя грань показывается, при t=TopOff (false) - нет.

FillEllipse(X,Y, RX,RY) - заполненный эллипс;

Sector(X,Y, A1,A2, RX,RY) - заполненный сектор эллипса;

PieSlice(X,Y, A1,A2, R) - заполненный сектор круга.

FillPoly(N, M) - заполнить произвольную плоскую фигуру с границей, описанной массивом N точек границы.

М - параметр типа PointType ( Var M: array[1..N] of PointType).

1. Построение графиков функций и траекторий движения Проведение расчетов желательно сопровождать визуализацией результатов на экране монитора. Это позволяет избежать ошибок, контролировать результаты расчета и оптимизировать алгоритм.

Графики функций строятся обычно в декартовой системе координат (XoY). Функция может быть задана в явном виде типа Y=F(X), в неявном: F(X, Y)=0, в параметрическом: X=Fx( t), Y=Fy( t).

1.1. Построение графика функции Y=F(X) с масштабированием по осям координат.

При построении графиков функций на экране монитора необходимо преобразовывать расчетные координаты в графические с соблюдением определенных пропорций, а также предусмотреть возможность масштабирования графика по осям координат. Для этого необходимо создать процедуры, обеспечивающие универсальность программирования графических изображений. Ниже приводится алгоритм построения графиков в правой системе координат, расположенной в заданной области экрана, с возможностью автоматического масштабирования.

Пусть задана непрерывная функция F(X) left right в диапазоне изменения аргумента X=[A.B].

up Y Требуется построить по N точкам график X функции Y=F(X) в прямоугольной области A 0 B экрана left, up, right, down.

down Алгоритм построения графика функции Y=F(X).

1). Определяем массивы значений аргумента и функции:

X[i], Y[i]=F( X[i] ), где i= 1...N. При равномерном разбиении интервала [A..B] массивы можно задавать операторами:

Dx:= (B-A) /(N-1); { шаг разбиения по X } for i:=1 to N do begin X[i]:= A + round( Dx*(i-1)); Y[i]:= F( X[i] ) end;

2). Определяем наибольшее (Y_max) и наименьшее (Y_min) значения функции в заданном интервале изменения аргумента:

Y_max:= Y[1]; Y_min:= Y[1];

for i:= 1 to N do begin IF Y_max < Y[i] THEN Y_max:= Y[i];

IF Y_min > Y[i] THEN Y_min:= Y[i] end;

В случае явного задания функции для аргумента X наибольшее значение X_max:= B и наименьшее X_min:= A. Эти значения необходимо определить для полного размещения графика в расчетной области.

3). Определяем коэффициенты масштабирования при построении графика в заданной области экрана:

Kx:= ( right - left) /(X_max - X_min);

Ky:= (down - up ) /(Y_max - Y_min);

Если X и Y имеют одинаковую размерность или оба безразмерны, то появится искажение естественной формы кривой вследствие разного масштабирования по осям координат (растяжение или сжатие по одной из осей). Для вывода графика без искажения формы кривой следует переназначить координаты области экрана так, чтобы получить Ky=Kx.

Пример операторов для автомасштабирования:

Пусть заданы нижняя, верхняя и левая границы области построения графика: down, up, left. Необходимо найти значение right при условиях: Ky=Kx и right<=GetMaxX. Если условие ограничения графика по длине экрана не выполняется, то полагается right:=GetMaxX, и значение up корректируется (уменьшается).

Ky:= (down - up ) /(Y_max - Y_min); Kx:= Ky;

right:= left + Round( Kx*(X_max - X_min));

If right > GetMaxX then begin right:= GetMaxX; Kx:= ( right-left) /(X_max - X_min); Ky=Kx;

up:= down - Round( Ky*(Y_max - Y_min)) end;

4). Определяем координаты точек для построения графика в системе координат экрана:

XG[ i]:= left + round( Kx * ( X[ i] -X_min));

YG[ i]:= down - round( Ky * ( Y[ i] -Y_min));

Здесь Kx*(X[i] -X_min) и Ky*(Y[i] -Y_min) - смещения координат точек по соответствующим осям относительно границ области left и down. Разные знаки перед смещениями по осям X и Y получаются из-за необходимости "переворота" оси Y, которая в координатах монитора направлена сверху вниз.

5). Строим график в виде последовательных отрезков:

moveto( XG[1], YG[1] );

for i:=2 to N do lineto( XG[ i], YG[ i] );





6). Строим оси координат, предварительно задав начало координат X0, Y0 (обычно X0 = 0, Y0 = 0 ) и вычислив:

XG0:= left + round( Kx * (X0 - X_min));

YG0:= down - round( Ky * (Y0 - Y_min));

Оси координат целесообразно строить лишь с случае их попадания в соответствующие диапазоны X_min...X_max, Y_min...Y_max:

if X_min *X_max<=0 then line( XG0, up, XG0, down);

if Y_min *Y_max<=0 then line( left, YG0, right, YG0);

Доработать методику для совместного построения нескольких графиков несложно. Необходимо для всех функций определить дискретные координаты Y[i] и найти наибольшее и наименьшее значения для всех функций в заданных диапазонах изменения аргументов. Наибольшим значениям присвоить Y_max и X_max, а наименьшим - Y_min и X_min. Затем определить область для построения графика и координаты точек кривых. Кривые для разных функций желательно рисовать разным цветом с указанием вида функции.

1.2. Построение графика функции, заданной в параметрической форме Y=FY( t), X=FX( t).

1). Определяем массивы значений параметра t[i], а также функций X[i]=FX( t[i] ), Y[i]=FY( t[i] ), где i= 1...N. При равномерном разбиении интервала [A..B] изменения параметра массивы можно задать операторами:

Dt:= (B-A) /(N-1); { шаг разбиения по t } for i:=1 to N do begin t[ i]:=A+round( Dt*(i-1)); X[ i]:=FX( t[i] ); Y[i]:=FY( t[i] ) end;

2). Аналогично п.2 алгоритма построения графика функции Y=F(X) определяем наибольшее (Y_max) и наименьшее (Y_min) значения функции Y=FY(t) в заданном интервале изменения параметра t и аналогично X_max, X_min для функции X=FX(t).

Далее следуем по.п. 3..5 алгоритма построения графика функции Y=F(X).

Параметрическая форма задания функций позволяет значительно разнообразить виды графических кривых. Наиболее часто используется представление в полярных координатах в виде зависимости длины радиус-вектора R от его направления (alfa - угол между вектором и осью X, - используется в качестве параметра):

R=F( alfa), X=R*sin( alfa), Y=R*cos( alfa).

1.3. Построение траекторий движения При расчете физических процессов составляется математическая модель - система уравнений, описывающая зависимости между физическими величинами при некоторых упрощающих допущениях.

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

Рассмотрим задачу определения траектории точки, движущейся в некоторой плоскости под действием различных сил. Например, необходимо вычислить траекторию движения снаряда с учетом сопротивления воздуха или ракеты с учетом изменения ее массы, движущихся в поле тяготения Земли.

Координаты точки X( t), Y( t) в некоторый момент времени t можно определить, зная ее координаты X( t-dt), Y( t-dt) в предыдущий момент времени t-dt и изменение координат dX,dY:

X( t) = X( t-dt) + dX( t), Y( t) = Y( t-dt) + dY( t).

Если временной интервал выбрать достаточно малым, то можно полагать, что скорость точки на этом интервале не изменяется и приращения координат определяются по формулам:

dX( t) = Vx( t)*dt, dY( t) = Vy( t)*dt.

Здесь Vx(t), Vy(t) - проекции скорости на оси координат.

Составляющие скорости Vx(t) и Vy(t) можно вычислить по формулам:

Vx( t) = Vx( t-dt) + Ax( t) *dt, Vy( t) = Vy( t-dt) + Ay( t) *dt.

Здесь Ax( t), Ay( t) - проекции ускорения на оси координат.

Ускорение определяется силами, действующими на точку - оно равно равнодействующей силе, деленной на массу точки. Силы могут зависеть от координат и скорости точки, а также от времени.

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

Алгоритм расчета траектории движения точки:

1). Определяем силы, действующие на точку, и находим проекции ускорения на оси координат. В общем случае ускорение точки зависит от многих факторов и в момент времени t задается как функция от скорости, координат и времени :

Ax:= Fx(Vx, Vy, X, Y, t), Ay:= Fy(Vx, Vy, X, Y, t), где Vx,Vy, Ax,Ay - проекции скорости и ускорения.

2). Задаем начальное положение точки - координаты X[1], Y[1] и начальные скорость и ускорение в виде проекций на оси координат:

X[1]:= X0; Y[1]:= Y0; Vx[1]:= V*cos( fi); Vy[1]:= V*sin( fi);

Ax[1]:= Fx( Vx[1], Vy[1], X[1], Y[1], t[1] );

Ay[1]:= Fy( Vx[1], Vy[1], X[1], Y[1], t[1] );

где V - начальная скорость, fi - угол наклона вектора скорости к оси Х.

3). Задаем временной шаг dt и разбиваем весь временной интервал на N участков. При равномерной разбивке приращение времени определяется по формуле:

dt:= (t[N]-t[1]) /(N-1); где t[N]-t[1] - время движения точки.

Выбор величины dt определяется необходимой точностью расчета, возможностями вычислительной техники, и может уточняться при решении задачи.

4). Вычисляем массивы скоростей, ускорений и координат точки:

For i:= 2 to N do begin Vx[ i]:=Vx[i-1] + Ax[i-1] *dt;

Vy[ i]:=Vy[i-1] + Ay[i-1] *dt;

X[ i]:= X[i-1] + 0.5*(Vx[i-1] + Vx[ i] ) *dt;

Y[ i]:= Y[i-1] + 0.5*(Vy[i-1] + Vy[ i] ) *dt;

Ax[ i]:= Fx( Vx[ i], Vy[ i], X[ i], Y[ i], t[ i] );

Pages:     || 2 | 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.