Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обработка текстовой и графической информации
.pdf
Пример 10. Рисование графиков (фрагменты программы)
Рис. 2. Вариант оформления окна диалога (см. цв. рис. на форзаце в конце книги)
101
мата *.BMP, они легко могут быть изменены пользователем без внесения
изменений всаму программу. Точно так же могут быть изменены идругие виды настроек (число кнопок, количество иразмеры окон, положения областей ввода ивывода ит.п.). Эта информация может задаваться
вфайле исходных данных именяться по желанию пользователя.
Данный пример показывает, что язык FORTRAN обеспечивает до-
статочную гибкость в реализации алгоритмов. Он позволяет охватить
намного более широкий круг задач, чем это обычно принято считать.
Пример 10. Рисование графиков
(фрагменты программы)
cПодпрограммавводаданных
subroutineObrabotka
usedib

102 Глава 2. Обработка графической информации
implicitreal*8(a-h,o-z)
cМассивыдляхраненияточекграфиков
real*8x(100000),y(100000)
*,xmax,xmin,ymax,ymin,zmax,zmin,zzz
*,z(100)
dimensionijzwZ(100)
character(80)zagolowok
character(12)Xzagol,Yzagol,Zzagol
character(40)nazwanie
cПеременныедлявводаданныхизстроки
character(140)sstroka
character(1)stroka(140),tabul,probel,tchk,zpt
equivalence(stroka(1),sstroka)
datatabul/" "/
dataprobel/""/
datatchk/"."/
datazpt/","/
cПараметрыэкрана
integer*2ix2,iy2
common/ekran/ix2,iy2
common/pole/polelew0,polepraw0,polewerh0,poleniz0,
*xzm0,yzm0
type(qwinfo)qw
qw.type=qwin$max
cВводданныхизфайла14.
cВывод(печать)вфайл2
cПриводимкомментариикисходнымданным(дляудобства
cпоискаипросмотра)
read(14,'(a80)')zagolowok
write(2,*)zagolowok
read(14,'(a80)')zagolowok
write(2,*)zagolowok
read(14,'(a80)')zagolowok

Пример 10. Рисование графиков (фрагменты программы)
write(2,*)zagolowok
write(2,*)
write(2,*)
read(14,'(a40)')nazwanie
write(2,*)nazwanie
write(2,*)
write(2,*)
cЗадаемразмерыокнаэкрана
read(14,*)ix2,iy2
write(2,*)'Okno',ix2,iy2
cОкно
qw.x=0
qw.y=0
qw.h=iy2
qw.w=ix2
qw.type=qwin$set
callsetviewport(0,0,ix2,iy2)
i4=setwsizeqq(qwin$framewindow,qw)
callsettextwindow(1,1,46,100)
i4=focusqq(qwin$framewindow)
103
cЗадаемразмерыполейрисунка
read(14,*)polelew0
read(14,*)polepraw0
read(14,*)polewerh0
read(14,*)poleniz0
cЗадаемнаклоносиZграфика(3D)
read(14,*)xzm0
read(14,*)yzm0
cЗадаемобозначенияосейкоординат
read(14,'(a12)')Xzagol
read(14,'(a12)')Yzagol
read(14,'(a12)')Zzagol

104 Глава 2. Обработка графической информации
cЗадаемпараметрышрифтов
read(14,*)metipfont
read(14,*)mefont
cЗадаемметкитолщинлиний
read(14,*)metol
read(14,*)metolz
cЗадаемметкуцвета
read(14,*)mezw
cЗадаемметку«заливки»графика
read(14,*)mezal
cЗадаемметкусглаживанияграфика
read(14,*)mesglag
cГраницыосиx
read(14,*)xmin,xmax
cГраницыосиy
read(14,*)ymin,ymax
cШагсеткипоосиy
read(14,*)deltay
cГраницыосиz
read(14,*)zmin,zmax
cВводимаяинформация(всеточкиивсеграфики)
cЧислографиков(до100графиков)
read(14,*)ngraf
write(2,*)'Числографиковngraf=',ngraf
cЧислоточекнаграфике
read(14,*)n
write(2,*)'Числоточекнаграфикеn=',n
cВыводимаянарисунокинформация(частьграфиковичасть
cточекэтихграфиков)
read(14,*)ngraf1
read(14,*)ngraf2
read(14,*)n1
read(14,*)n2

Пример 10. Рисование графиков (фрагменты программы)
cСчитываемзаголовок
read(14,'(a80)')zagolowok
write(2,*)zagolowok
cМеткарисованияграфика(2Dили3D)
read(14,*)mez
write(2,*)'mez=',mez
cНачальныезначенияграниц
Xgrafmin=1.0d30
Xgrafmax=-1.0d30
Ygrafmin=1.0d30
Ygrafmax=-1.0d30
Zgrafmin=1.0d30
Zgrafmax=-1.0d30
cПереборграфиков
do77nom=1,ngraf
write(2,*)
write(2,*)'Номерграфика=',nom
write(2,*)
cСчитываемзаголовок
read(14,'(a80)')zagolowok
write(2,*)zagolowok
cЗадаемцветграфика
read(14,*) ijzwZ(nom)
write(2,*)'Цветграфика=',ijzwZ(nom)
cЗадаемположениеграфикапоосиZ(длярисунка3D)
read(14,*)z(nom)
write(2,*)'Z(nom)=',z(nom)
cЗначенияграницпоосиZ
if(Zgrafmin.gt.z(nom))Zgrafmin=z(nom)
if(Zgrafmax.lt.z(nom))Zgrafmax=z(nom)
105
write(2,*)'i,x(i),y(i)'
cПереборточекграфика
do1ii=1,n
i=ii+n*(nom-1)

106 Глава 2. Обработка графической информации
cВариантнепосредственноговводаданныхизфайла14
cread(14,*)x(i),y(i)
cВариантвводаданныхизфайла14
c(например,скопированныхстроктаблицыEXEL).
cПредварительносчитываемданныевсимвольнуюпеременную
read(14,'(a140)',iostat=iche)sstroka
if(iche.eq.0)goto700
write(2,*)'Ошибкавданныхnom,ii=',nom,ii
700continue
cПредварительнаяподготовкастрокиксчитываниюизнее
cданных
do5005jjj=1,120
cЗаменапробеломсимволатабуляции
if(stroka(jjj).eq.tabul)stroka(jjj)=probel
cЗаменаточкойсимволазапятой
if(stroka(jjj).eq.zpt)stroka(jjj)=tchk
5005continue
cКонецподготовкистроки
cСчитываниецифровыхданныхизсимвольнойпеременной
csstroka(внейужеотсутствуютсимволытабуляцииизапятые)
read(sstroka,*,iostat=iche)x(i),y(i)
if(iche.eq.0)goto701
write(2,*)'Ошибкавданных
*nom,ii,x,y=',nom,i,x(i),y(i)
701continue
cПечатьвведеннойинформации
write(2,301)ii,x(i),y(i)
cОпределениеminиmaxкоординатточек(значенияграницпо
cосямXиY)
if(Xgrafmin.gt.x(i))Xgrafmin=x(i)
if(Xgrafmax.lt.x(i))Xgrafmax=x(i)

Пример 10. Рисование графиков (фрагменты программы)
if(Ygrafmin.gt.y(i))Ygrafmin=y(i)
if(Ygrafmax.lt.y(i))Ygrafmax=y(i)
1continue
cКонецперебораточекграфика
77continue
cКонецперебораграфиков
301format(i5,2f12.1)
write(2,*)
cНормированиеграфиковпокоординатеZ
zzz=zmax-zmin
if(zzz.le.0.0d0)zzz=1.0d0
do88i=1,ngraf
88z(i)=z(i)/zzz
write(2,*)'Xgrafmin,Xgrafmax=',Xgrafmin,Xgrafmax
write(2,*)'Ygrafmin,Ygrafmax=',Ygrafmin,Ygrafmax
write(2,*)'Zgrafmin,Zgrafmax=',Zgrafmin,Zgrafmax
write(2,*)
write(2,*)
107
cВыбралишрифт—кириллицу(0—латинскийшрифт)
meRuss=1
cВыбралиметкуштрихи
meschtrih=1
cВызовподпрограммырисованияграфиков
callgrak3D(nazwanie,
*ngraf,n,xmin,xmax,ymin,ymax,zmin,zmax,
*x,y,z,deltay,
*imax,mesglag,mefont,metipfont,metol,metolz,mezw,
*Xzagol,Yzagol,Zzagol,mez,ngraf1,ngraf2,n1,n2,
*meRuss,meschtrih,mezal,ijzwZ,
*Xgrafmin,Xgrafmax,Ygrafmin,Ygrafmax,Zgrafmin,Zgrafmax)

108 Глава 2. Обработка графической информации
read(*,*)!Ждетнажатиякнопки«ENTER»
return
end
cПодпрограммарисованияграфиков
SUBROUTINEgrak3D(nazwanie0,
*ngraf,nwrem,xxmin,xxmax,yymin,yymax,zzmin,zzmax,
*xgr,ygr,z,deltay,
*mestatist,mesglag,mefont,metipfont,metol0,metolz0,mezw,
*Xzagol,Yzagol,Zzagol,mez,ngraf1,ngraf2,n1,n2,
*meRuss,meschtrih,mezal,ijzwZ,
*Xgrafmin,Xgrafmax,Ygrafmin,Ygrafmax,Zgrafmin,Zgrafmax)
usedib
implicitreal*8(a-h,o-z)
logical*2true/.true./
integer*2dummy,maxx,maxy,BOUNDARY
cРазмерэкрана(ix2,iy2=1600*1200)
integer*2ix2,iy2
common/ekran/ix2,iy2
real*8xgr(nwrem*ngraf),x(nwrem*ngraf)
*,ygr(1),z(ngraf),xz,yz,zi,zmin,zmax,xzm,yzm
*,x1,x2,x3,x4,xc,y1,y2,y3,y4,yc,dx,ay,dt
*,xxmax,xxmin,yymax,yymin,zzmax,zzmin
*,xmax,xmin,ymax,ymin,razmer,raz,xxx,yyy,
*wx1,wy1,wx2,wy2,ddx,ddy
*,polelew,polepraw,polewerh,poleniz,razmergr,cifrax,cifray
*,xx1,yy2,xx2,yy1,x1p,y1p,dddx,dddy
*,xmins,xmaxs,ymins,ymaxs,x1s,y1s,xmins1
*,yz1,yz2,yzp
record/wxycoord/s

Пример 10. Рисование графиков (фрагменты программы)
character(80)zagolowok
character(2)nomj
character(4)nomj4
character(3)nomkanala
character(5)nle5
character(8)nle
character(18)nle18
character(12)Xzagol,Yzagol,Zzagol
character(7)nle7
cРабочиемассивыдлясглаживанияграфика
real*8x1b(100000),x1kt(100000),y1b(100000),y1kt(100000),
*cni(100000),yyb(100000),yykt(100000)
cПеременныедляформированияименирисунка*.bmp
character(40)nazwanie,nazwanie0
character(53)lm
character(1)lmmm(53),nwida
equivalence(lmmm(1),lm)
equivalence(lmmm(9),nazwanie)
datalm
*/"Risunki\.bmp"/
109
cМассивдлярисованиямногоугольникапоточкамграфика
RECORD/wxycoord/points(32767)
integer*2dummy2
cХранимполярисунка
common/pole/polelew0,polepraw0,polewerh0,poleniz0,
*xzm0,yzm0
cЗадаемтипылиний
integer*2Ltyp(4)/#FFFF,#FF00,#F0F0,#CCCC/
c#FFFF—сплошнаялиния,
c#FF00—длинныештрихи,

110 Глава 2. Обработка графической информации
c#F0F0—короткиештрихи
c#CCCC-точки
cМаскаиспользуетсядляуправлениявидомзаполнения
cзамкнутойобласти.Задаеммассивыточек8*8бит
c(1-рисуемточкунаэкране,0—нерисуем).
cПримерымасокзаполнениязамкнутойобластиграфикацветом
cМаска(диагональнаяштриховка)
integer*1hatch(8)/2#00000111,2#00001110,2#00011100,
*2#00111000,2#01110000,2#11100000,2#11000001,2#10000011/
cМаска(мелкаягоризонтальнаяштриховка)
integer*1hatch3(8)/2#11111111,2#00000000,2#11111111,
*2#00000000,2#11111111,2#00000000,2#11111111,2#00000000/
cМаска(крупнаягоризонтальнаяштриховка)
integer*1hatch4(8)/2#11111111,2#00000000,2#00000000,
*2#00000000,2#00000000,2#00000000,2#00000000,2#00000000/
cМаска(горизонтальнаяштриховка,пунктир)
integer*1hatch5(8)/2#11110000,2#00000000,2#00000000,
*2#00000000,2#00000000,2#00000000,2#00000000,2#00000000/
cМаска(диагональнаяштриховка)
integer*1hatch6(8)/2#11100000,2#01110000,2#00111000,
*2#00011100,2#00001110,2#00000111,2#10000011,2#11000001/
cМаска(диагональнаяштриховка)
integer*1hatch7(8)/2#11111111,2#10000001,2#10000001,
*2#10000001,2#10000001,2#10000001,2#10000001,2#11111111/
cМаска(сплошноезаполнениезамкнутойобластицветом)
integer*1hatch8(8)/2#11111111,2#11111111,2#11111111,
*2#11111111,2#11111111,2#11111111,2#11111111,2#11111111/
cЦветаграфиков
dimensionijzwZ(100)
cЗадалицвета,соответствующиеуровнямYграфика
real*8yzw(10)
dimensionijzwY(10)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
