Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Обработка текстовой и графической информации

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Пример 10. Рисование графиков (фрагменты программы)
Рис. 2. Вариант оформления окна диалога (см. цв. рис. на форзаце в конце книги)
101
мата *.BMP, они легко могут быть изменены пользователем без внесения изменений всаму программу. Точно так же могут быть изменены идру­гие виды настроек (число кнопок, количество иразмеры окон, положе­ния областей ввода ивывода ит.п.). Эта информация может задаваться вфайле исходных данных именяться по желанию пользователя.
Данный пример показывает, что язык FORTRAN обеспечивает до-
статочную гибкость в реализации алгоритмов. Он позволяет охватить намного более широкий круг задач, чем это обычно принято считать.
Пример 10. Рисование графиков
(фрагменты программы)
cПодпрограммавводаданных subroutineObrabotka usedib
102 Глава 2. Обработка графической информации
implicitreal*8(a-h,o-z) cМассивыдляхраненияточекграфиков real*8x(100000),y(100000) *,xmax,xmin,ymax,ymin,zmax,zmin,zzz *,z(100) dimensionijzwZ(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) datatabul/" "/ dataprobel/""/ datatchk/"."/ datazpt/","/ cПараметрыэкрана integer*2ix2,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 callsetviewport(0,0,ix2,iy2) i4=setwsizeqq(qwin$framewindow,qw) callsettextwindow(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Переборграфиков do77nom=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Переборточекграфика do1ii=1,n i=ii+n*(nom-1)
106 Глава 2. Обработка графической информации
cВариантнепосредственноговводаданныхизфайла14 cread(14,*)x(i),y(i)
cВариантвводаданныхизфайла14 c(например,скопированныхстроктаблицыEXEL). cПредварительносчитываемданныевсимвольнуюпеременную read(14,'(a140)',iostat=iche)sstroka if(iche.eq.0)goto700 write(2,*)'Ошибкавданныхnom,ii=',nom,ii 700continue
cПредварительнаяподготовкастрокиксчитываниюизнее cданных do5005jjj=1,120 cЗаменапробеломсимволатабуляции if(stroka(jjj).eq.tabul)stroka(jjj)=probel cЗаменаточкойсимволазапятой if(stroka(jjj).eq.zpt)stroka(jjj)=tchk 5005continue cКонецподготовкистроки
cСчитываниецифровыхданныхизсимвольнойпеременной csstroka(внейужеотсутствуютсимволытабуляцииизапятые) read(sstroka,*,iostat=iche)x(i),y(i) if(iche.eq.0)goto701 write(2,*)'Ошибкавданных *nom,ii,x,y=',nom,i,x(i),y(i) 701continue
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)
1continue cКонецперебораточекграфика 77continue cКонецперебораграфиков
301format(i5,2f12.1) write(2,*) cНормированиеграфиковпокоординатеZ zzz=zmax-zmin if(zzz.le.0.0d0)zzz=1.0d0 do88i=1,ngraf 88z(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Вызовподпрограммырисованияграфиков callgrak3D(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Подпрограммарисованияграфиков
SUBROUTINEgrak3D(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)
usedib implicitreal*8(a-h,o-z) logical*2true/.true./ integer*2dummy,maxx,maxy,BOUNDARY cРазмерэкрана(ix2,iy2=1600*1200) integer*2ix2,iy2 common/ekran/ix2,iy2
real*8xgr(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)nle5 character(8)nle character(18)nle18 character(12)Xzagol,Yzagol,Zzagol character(7)nle7
cРабочиемассивыдлясглаживанияграфика real*8x1b(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) datalm */"Risunki\.bmp"/
109
cМассивдлярисованиямногоугольникапоточкамграфика RECORD/wxycoord/points(32767) integer*2dummy2
cХранимполярисунка common/pole/polelew0,polepraw0,polewerh0,poleniz0, *xzm0,yzm0
cЗадаемтипылиний integer*2Ltyp(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*1hatch(8)/2#00000111,2#00001110,2#00011100, *2#00111000,2#01110000,2#11100000,2#11000001,2#10000011/ cМаска(мелкаягоризонтальнаяштриховка) integer*1hatch3(8)/2#11111111,2#00000000,2#11111111, *2#00000000,2#11111111,2#00000000,2#11111111,2#00000000/ cМаска(крупнаягоризонтальнаяштриховка) integer*1hatch4(8)/2#11111111,2#00000000,2#00000000, *2#00000000,2#00000000,2#00000000,2#00000000,2#00000000/ cМаска(горизонтальнаяштриховка,пунктир) integer*1hatch5(8)/2#11110000,2#00000000,2#00000000, *2#00000000,2#00000000,2#00000000,2#00000000,2#00000000/ cМаска(диагональнаяштриховка) integer*1hatch6(8)/2#11100000,2#01110000,2#00111000, *2#00011100,2#00001110,2#00000111,2#10000011,2#11000001/ cМаска(диагональнаяштриховка) integer*1hatch7(8)/2#11111111,2#10000001,2#10000001, *2#10000001,2#10000001,2#10000001,2#10000001,2#11111111/ cМаска(сплошноезаполнениезамкнутойобластицветом) integer*1hatch8(8)/2#11111111,2#11111111,2#11111111, *2#11111111,2#11111111,2#11111111,2#11111111,2#11111111/
cЦветаграфиков dimensionijzwZ(100)
cЗадалицвета,соответствующиеуровнямYграфика real*8yzw(10) dimensionijzwY(10)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]