ГРАФОР. Комплекс графических программ на фортране

Содержание

Слайд 2

Справка по фортрану Переменные, имена которых начинаются с букв I,J,K,L,N,M, –

Справка по фортрану

Переменные, имена которых начинаются с букв I,J,K,L,N,M, – имеют

тип INTEGER*4; все остальные – тип REAL*4.
Строковая константа занимает в памяти ровно столько байт, сколько символов указано в ее определении.
Элементы двумерного массива располагаются в линейной памяти компьютера по столбцам.
Передача аргументов: в подпрограмму передается адрес фактического параметра. Формальный и соответствующий ему фактический параметры должны быть одного типа.
Передача фактических параметров производится через стек, начиная с последнего. Стек от параметров освобождает вызываемая программа. Параметр – строка текста – передается в виде структуры: первое поле – адрес строки, второе поле – ее длина.
Слайд 3

Основные понятия Графическая система это совокупность алгоритмов обеспечивающих для заданного описания

Основные понятия

Графическая система это совокупность алгоритмов обеспечивающих для заданного описания объекта

получение его образа на видовой поверхности.
Математические координаты – координаты, используемые для описания модели объекта (метры, паскали, секунды и т.п.).
Физические координаты – координаты используемые устройством отображения образа объекта (пиксели, миллиметры и т.д.).
Слайд 4

SETBGR(N) и SETPEN(N) Установка цвета фона и цвета пера. Цвет фона

SETBGR(N) и SETPEN(N)

Установка цвета фона и цвета пера. Цвет фона должен

устанавливается до открытия страницы.
N - номер цвета:
0 – черный 8 – серый
1 – синий 9 - ярко синий
2 – зеленый 10 - ярко зеленый
3 – голубой 11 - ярко голубой
4 – красный 12 - ярко красный
5 – фиолетовый 13 - ярко фиолетовый
6 – коричневый 14 – желтый
7 – белый 15 - ярко белый
Слайд 5

Страница прямоугольное поле на бумаге или экране дисплея, в пределах которого

Страница

прямоугольное поле на бумаге или экране дисплея, в пределах которого должны

размещаться графические объекты. Создание страницы – это выбор её размеров, связанной с ней системы координат и единицы измерения (CMS, MMS, INCHES).
Создается подпрограммой PAGE(XL,YL,Name,N,J)
XL,YL – размеры страницы в выбранных единицах измерения
Name – название страницы
N – количество символов в названии
J = 1 – очерчивать = 0 – не очерчивать границу
Закрывается программой ENDPG(0)
Слайд 6

REGION(X,Y,XL,YL,NAME,N,J) позволяет определить на заданной странице прямоугольную область для построения образа

REGION(X,Y,XL,YL,NAME,N,J)

позволяет определить на заданной странице прямоугольную область для построения образа объекта.


X,Y координаты левого нижнего угла области относительно левого нижнего угла страницы);
XL,YL размеры области вдоль осей X и Y;
NAME название области;
N количество литер в названии;
J = 0 - границы не очерчиваются, J = 1 - границы очерчиваются.
Слайд 7

LIMITS(XMIN,XMAX,YMIN,YMAX) предназначена для задания пределов изменения функции и ее аргумента. XMIN

LIMITS(XMIN,XMAX,YMIN,YMAX)

предназначена для задания пределов изменения функции и ее аргумента.
XMIN математическое значение

координаты X, соответствующее левой границе области;
XMAX математическое значение координаты X, соответствующее правой границе области;
YMIN математическое значение координаты Y, соответствующее нижней границе области;
YMAX математическое значение координаты Y, соответствующее верхней границе области.
Слайд 8

MINMAX(A,N,AMN,AMX) позволяет определить минимальное и максимальное значения в массиве чисел. A

MINMAX(A,N,AMN,AMX)

позволяет определить минимальное и максимальное значения в массиве чисел.
A массив

чисел длины N,
AMN минимальное значение,
AMX максимальное значение.
Слайд 9

LINEO(X,Y,N) позволяет начертить в заданной области ломаную, связывающую N точек. B

LINEO(X,Y,N)

позволяет начертить в заданной области ломаную, связывающую N точек.
B массивах

X и Y передаются соответственно значения абсцисс и ординат точек, определяющих функцию
N указывает количество элементов в этих массивах
Слайд 10

LINEMO(X,Y,N,NM,JS) позволяет начертить в заданной области линию, связывающую N точек и

LINEMO(X,Y,N,NM,JS)

позволяет начертить в заданной области линию, связывающую N точек и пометить

заданные точки маркерами или пометить заданные точки маркерами, не вычерчивая кривой.
X,Y массивы абсцисс и ординат точек;
N количество точек;
0 ≤ NM ≤ 16 номер маркера (если NM < 0 - изображается маркер уменьшенных размеров);
JS шаг маркировки: JS < 0 - линия не проводится, JS = 0 или JS = 1 - маркируются все точки.
Слайд 11

BRОKEN(A1,A2,A3,A4) задает режим проведения прерывистой линии и её характер. Все значения

BRОKEN(A1,A2,A3,A4)

задает режим проведения прерывистой линии и её характер. Все значения задаются

в выбранных единицах измерения. Конфигурация, заданная двумя штрихами и двумя просветами, повторяет-ся необходимое число раз.
A1 длина первого штриха;
A2 длина просвета после первого штриха;
A3 длина второго штриха;
A4 длина второго просвета.
Слайд 12

BRLINE(X,Y,N) позволяет начертить непрерывную, штриховую или штрихпунктирную линию по заданной последовательности

BRLINE(X,Y,N)

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

Вид линии зависит от установленного режима.
X и Y - значения абсцисс и ординат точек, определяющих функцию,
N - количество элементов в этих массивах. Задавая параметр N отрицательным, можно начертить "негативную" линию, когда штрихи заменяются просветами, а просветы штрихами.
Слайд 13

POLREG(X,Y,RIN,RFN,THО,THF,NAME,N,H,J) определить на заданной странице полярную область для построения графиков. X,Y

POLREG(X,Y,RIN,RFN,THО,THF,NAME,N,H,J)

определить на заданной странице полярную область для построения графиков.
X,Y координаты центра

области в выбранных единицах измерения;
RIN,RFN внутренний и внешний радиусы в выбранных единицах измерения, (RFN-RIN) ≥ 0.5 см;
THО,THF минимальный и максимальный углы, определяющие радиальные граничные значения области (углы задаются в градусах), 360° ≥ (THF-THО) ≥ 5°;
NAME название области;
|N| количество литер в названии (если N > 0, название области выписывается вдоль оси Y, если N < 0 - вдоль оси X);
H высота литеры (если H=0., высота принимается равной 0.5 см);
J признак очерчивания границ области.
Слайд 14

LIMITS(RIN,RFN,THО,THF) позволяет зафиксировать пределы изменения функции в области рисования. RIN математическое

LIMITS(RIN,RFN,THО,THF)

позволяет зафиксировать пределы изменения функции в области рисования.
RIN математическое значение

радиуса, соответствую-щее внутренней круговой границе области;
RFN математическое значение радиуса, соответствующее внешней круговой границе области;
THО математическое значение угла, соответствующее начальному радиальному граничному значению области;
THF математическое значение угла, соответствующее конечному радиальному граничному значению области.
Слайд 15

POLINE(R,TH,N,KS,NM,JS,L) позволяет в заданной полярной области начертить кривую. R – массив

POLINE(R,TH,N,KS,NM,JS,L)

позволяет в заданной полярной области начертить кривую.
R – массив радиусов;
TH –

массив углов (в градусах или радианах - зависит от KS);
N – количество точек (при N < 0 кривая может выходить за пределы области);
|KS| – шаг по массиву данных (если KS > 0, углы задаются в радианах, если KS < 0 - в градусах);
|NM| – номер маркера (если NM < 0, изображается маркер уменьшенных размеров);
|JS| – шаг маркировки (если JS > 0, проводится линия с маркерами, если JS = 0 - без маркеров, если JS < 0, то изображаются только маркеры);
L = 0 – незамкнутая кривая, 1 – замкнутая кривая.
Слайд 16

RAXES(NAME,N,H,UR,KR,MR,T) провести и разметить радиальную ось. NAME – название оси; |N|

 RAXES(NAME,N,H,UR,KR,MR,T)

провести и разметить радиальную ось.
NAME – название оси;
|N| – количество литер:

N > 0 - название оси пишется справа от области вдоль оси Y, N < 0 - внизу;
|H| – высота литер (если H = 0, высота полагается равной 0.4 см, если H < 0, ось не проводится);
UR – размер основного деления на радиальной оси (если UR = 0., то производится автоматический выбор шага);
|KR| – количество вспомогательных делений внутри основного (если KR < 0, математические значения не подписываются);
MR = 0 – координатные линии не проводятся, 1 – координатные линии проводятся через основные деления, 2 – и через вспомога-тельные деления (через вспомогательные - штриховой линией);
T – математическое значение угла (в градусах), под которым проводится ось.
Слайд 17

THAXES(NAME,N,H,UT,KT,MT,R) позволяет провести и разметить угловую ось. NAME – название оси;

THAXES(NAME,N,H,UT,KT,MT,R)

позволяет провести и разметить угловую ось.
NAME – название оси;
|N| – количество

литер (если N > 0, название оси пишется справа от области вдоль оси Y, если N < 0, название оси пишется внизу);
|H| – высота литер(если H = 0, высота полагается равной 0.4 см, если H < 0, ось не проводится);
UT – размер основного деления по угловой оси (в градусах) (если UT = 0, производится автоматический выбор шага);
|KT| – количество вспомогательных делений внутри основного (если KT < 0, математические значения не подписываются);
MT = 0 координатные линии не проводятся, = 1 координатные линии проводятся через основные деления,  > 1 внутри основного деления проводится (MT-1) вспомогательных угловых координатных линий;
R – математическое значение радиуса, с которым проводится ось.
Слайд 18

Синус и косинус в декартовых координатах и кардиоида – в полярных

Синус и косинус в декартовых координатах и кардиоида – в полярных

global

_MAIN__
%include "macro.inc"
section .text
%assign N 100
%assign M 180
_MAIN__:
enter 0,0
Слайд 19

Табулирование y=sin x и z=1.5*cos x finit fld dword [h] fld

Табулирование y=sin x и z=1.5*cos x

finit
fld dword [h]
fld dword [a]
DO N,esi,4
fld st0
fst dword [x+esi]
fsincos
fmul dword [re15]
fstp dword [z+esi]
fstp dword

[y+esi]
fadd st0,st1
ENDDO
finit
Слайд 20

Табулирование r=1+sinϕ fldpi fidiv word [k] mov word [k],0 DO M,esi,4

Табулирование r=1+sinϕ

fldpi
fidiv word [k]
mov word [k],0
DO M,esi,4
fild word [k]
fst dword [t+esi]
fmul st0,st1
fsin
fld1
fadd
fstp dword [r+esi]
add word [k],2
ENDDO
finit

Слайд 21

Рисование декартовой области CALL _PAGE@24,20.,15.,"Sin(x) & 1.5*Cos(x)",19,0 CALL _SETPEN@4,1 CALL _REGION@32,2.5,2.5,15.,10.,"

Рисование декартовой области

CALL _PAGE@24,20.,15.,"Sin(x) & 1.5*Cos(x)",19,0
CALL _SETPEN@4,1
CALL _REGION@32,2.5,2.5,15.,10.," ",1,0
CALL _LIMITS@16,xmin,xmax,ymin,ymax
CALL _AXES@44," X ",3,1.,5," Y ",3,0.3,4,0
CALL _SETPEN@4,2
CALL _LINEMO@20,x,y,100,-2,10
CALL _SETPEN@4,3
CALL _BROKEN@16,0.5,0.2,0.3,0.2
CALL _BRLINE@12,x,z,100
CALL _ENDPG@4,0

Слайд 22

Рисование полярной области CALL _PAGE@24,15.,15.,"Кардиоида",9,0 CALL _POLREG@44,7.5,7.5,0.,6.,0.,360.," ",1,0.,0 CALL _LIMITS@16,0.,2.6,0.,360. CALL

Рисование полярной области

CALL _PAGE@24,15.,15.,"Кардиоида",9,0
CALL _POLREG@44,7.5,7.5,0.,6.,0.,360.," ",1,0.,0
CALL _LIMITS@16,0.,2.6,0.,360.
CALL _SETPEN@4,4
CALL _POLINE@28,r,t,M,-1,1,0,1
CALL _LIMITS@16,0.,2.6,360.,0.
CALL _SETPEN@4,5
CALL _POLINE@28,r,t,M,-1,1,0,1
CALL _SETPEN@4,6
CALL _THAXES@32," ",1,0.35,30.,1,3,2.
CALL _SETPEN@4,1
CALL _RAXES@32," ",1,0.,1.,-2,2,0.
CALL _ENDPG@4,0

Слайд 23

Эпилог и сегмент начальных данных CALL _for_pause," " leave ret section

Эпилог и сегмент начальных данных

CALL _for_pause," "
leave
ret
section .data
a dd -1.9
h dd 0.1
re15 dd 1.5
xmin dd -2.
xmax dd 8.2
ymin dd -1.5
ymax dd 1.5
k dw M

Слайд 24

Неинициализированные данные (описание массивов) section .bss x resd N y resd

Неинициализированные данные (описание массивов)

section .bss
x resd N
y resd N
z resd N
r resd M
t resd M

Слайд 25

Слайд 26

Сравнение макросов Си %macro CALL 1-*.nolist extern _%1 %ifnempty %2 %push

Сравнение макросов

Си

%macro CALL 1-*.nolist
extern _%1
%ifnempty %2
%push call
%assign %$i 0
%rep %0 - 1
%rotate -1
put %1
%endrep
call _%{-1:-1}
add esp,4*(%0 - 1) +

%$i
%pop
%else
call _%1
%endif
%endmacro

Фортран

%macro CALL 1-*.nolist
extern %1
%ifnempty %2
%rep %0 - 1
%rotate -1
put %1
%endrep
call %{-1:-1}
%else
call %1
%endif
%endmacro