Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обработка текстовой и графической информации
.pdf
Пример 10. Рисование графиков (фрагменты программы)
cСимвольныепеременныедлязаданияшрифтовтекста
character(4)widfont
character(2)nomfont
character(1)widfont1(4)
equivalence(widfont1(1),widfont)
equivalence(widfont1(3),nomfont)
character(21)tipfont
write(nomfont,'(i2)')mefont
cжирныесимволы-e,
cнаклонныесимволы-i,
cвысотасимвола-h.
cwidfont1(1)='i'
widfont1(1)=''
widfont1(2)='h'
if(metipfont.eq.0)tipfont='courier'
if(metipfont.eq.1)tipfont="'t'TimesNewRoman'"
if(metipfont.eq.2)tipfont='ArialBlack'
cАналогичнымобразомможноназначитьдругиешрифты
111
cЦветаграфиков
c0—черный
ijzwY(1)=0
c1—темносиний
ijzwY(2)=1
c9—яркосиний
ijzwY(3)=9
c3—голубой
ijzwY(4)=3
c2—зеленый
ijzwY(5)=2
c10—яркозеленый
ijzwY(6)=10
c14—желтый
ijzwY(7)=14
c12—красный
ijzwY(8)=12

112 Глава 2. Обработка графической информации
c4—темнокрасный
ijzwY(9)=4
c0—черный
ijzwY(10)=0
nazwanie=nazwanie0
metol=metol0
metolz=metolz0
cГрафикCpперевернут
if(mez.eq.(-1))yyy=yymin
if(mez.eq.(-1))yymin=-yymax
if(mez.eq.(-1))yymax=-yyy
ddy=(yymax-yymin)/9.0d0
cУровнишкалыцветов(еслицветвыбираемпозначениюY)
do146kkk=1,10
cЧерно-белыйрисунок
if(mezw.eq.0)ijzwY(kkk)=0
146yzw(kkk)=ddy*(kkk-1)+yymin
cМеткатолщины«бублика»
metolb=5
if(metolb.lt.metol)metolb=metol
if(metolb.lt.metolz)metolb=metolz
34format(f8.2)
cОкно
xmin=xxmin
xmax=xxmax
ymin=yymin
ymax=yymax
zmin=zzmin
zmax=zzmax
xxx=xmax-xmin
yyy=ymax-ymin

Пример 10. Рисование графиков (фрагменты программы)
zzz0=zmax-zmin
if(zzz0.le.0.0d0)zzz0=1.0d0
razmer=dsqrt(xxx*xxx+yyy*yyy)
cУвеличениеполейрисунка
polelew=polelew0
polepraw=polepraw0
poleniz=poleniz0
polewerh=polewerh0
cmez=0график2D,
cmez=1график3D,
cmez=-1график3DсперевернутойосьюOY(рисуемCp).
if(mez.eq.0)goto219
zmin=0.0d0
zmax=zmin
do19i=1,ngraf
zi=z(i)
if(zi.gt.zmax)zmax=zi
if(zi.lt.zmin)zmin=zi
19continue
zzz=zmax-zmin
if(zzz.le.0.0d0)zzz=1.0d0
cУвеличилиполярисунка3D
xzm=xzm0*xxx/zzz
yzm=yzm0*yyy/zzz
if(zmax.gt.0.0d0)polepraw=polepraw0+xzm*zmax/xxx
if(zmin.lt.0.0d0)polelew=polelew0-xzm*zmin/xxx
if(zmax.gt.0.0d0)polewerh=polewerh0+yzm*zmax/yyy
if(zmin.lt.0.0d0)poleniz=poleniz0-yzm*zmin/yyy
xzm=-xzm
yzm=-yzm
219continue
113
cУвеличилиразмерырисунка(добавилиполя)
x1=xmin-polelew*xxx

114 Глава 2. Обработка графической информации
x2=xmax+polepraw*xxx
y1=ymin-poleniz*yyy
y2=ymax+polewerh*yyy
xx1=x1
xx2=x2
yy1=y1
yy2=y2
cЗадалиокнорисунка
dummy=setwindow(true,x1,y2,x2,y1)
c15—белыйцвет
dummy=setcolor(15)
cРисуембелыйпрямоугольник(очистилиэкран)
dummy=rectangle_w($gllinterior,x1,y2,x2,y1)
cВыбралистильлиний
callsetlinestyle(#ffff)
cВыбралишрифт
if(initializefonts().lt.0)continue
if(mefont.gt.48)mefont=48
if(mefont.lt.10)mefont=10
dummy=setfont(tipfont//widfont)
ddx=xxx*4.0d0/ix2
ddy=yyy*4.0d0/iy2
dddx=0.0002d0*(x2-x1)*metol
dddy=0.0002d0*(y2-y1)*metol
nwr5=nwrem/5
nwr25=nwrem/25
nwremm1=nwrem-1
xmins=xmin
xmaxs=xmax
ymins=ymin

Пример 10. Рисование графиков (фрагменты программы)
ymaxs=ymax
3030format(i2)
cСдвигцифрсеткиcifrax,cifray
cifrax=-xxx*(5+mefont)/ix2
if(xmin.gt.0.0d0)cifrax=cifrax+xmin
cifray=0.1d0
cШагсетки
x2=xxx/5.0d0
y2=yyy/5.0d0
33format(g7.1)
35format(g8.2)
335format(f8.2)
cОкруглениешагасетки
callschag8(x2)
callschag8(y2)
cЗаданныйшагсеткиdeltayпоосиy
delta=deltay
if(deltay.gt.0.0d0)y2=delta
x3=x2
y3=y2
115
c7—белоголубойцвет
dummy=setcolor(7)
cсдвигцифрвниз
wy1=ymin-ddy*5-zmin*yzm
cРисуемлиниисеткивправо
if(xmax.lt.0.0d0)goto110
x1=xmin-zmin*xzm
if(xmin.lt.0.0d0)x1=0.0d0-zmin*xzm
xc=x1-x3
do10i=1,50
cЦифрыпоосиxвнизуграфика
if(x1.gt.xmax)goto110

116 Глава 2. Обработка графической информации
wx1=x1-ddx*(mefont+2)
callmoveto_w(wx1,wy1,s)
xc=xc+x3
x4=xc+zmin*xzm
cПоследнююцифрупоосиxнеставим
if((x1+x2).gt.xmax)goto2500
ix4=x4
if(wx1.lt.(xmin-zmin*xzm))goto10
if(x2.ge.0.00001d0)write(nle,305)x4
if(x2.ge.0.0001d0)write(nle,304)x4
if(x2.ge.0.001d0)write(nle,303)x4
if(x2.ge.0.01d0)write(nle,302)x4
if(x2.ge.0.10d0)write(nle,301)x4
if(x2.ge.1.0d0)write(nle,'(i8)')ix4
cЧерныйцвет
dummy=setcolor(0)
calloutgtext(nle)
2500continue
y4=ymin-zmin*yzm
callmoveto_w(x1,y4,s)
cВертикальныештриховыелинии
if(meschtrih.eq.0)goto2661
c7—бело-голубойцвет
dummy=setcolor(7)
cТиплинии—короткиештрихи
callsetlinestyle(Ltyp(3))
dummy=lineto_w(x1,(ymax-zmin*yzm))
cВернулисплошныелинии
callsetlinestyle(Ltyp(1))
callmoveto_w(x1,y4,s)
2661continue
cСплошнаялинияосиoy
if(x1.eq.0.0d0)dummy=lineto_w(x1,(ymax-zmin*yzm))
cВертикальныештрихи
if(mez.ne.0)dummy=lineto_w(x1,wy1)

Пример 10. Рисование графиков (фрагменты программы)
10x1=x1+x2
110continue
cКонецрисуемлиниисеткивправо
117
Замечание. Аналогичным образом рисуются другие линии сетки (вле-
во, вверх, вниз). Разделение сетки может иметь смысл вслучаях, если
интересуют значения параметра лишь на части графика, имеются различия шага в правой и левой частях сетки, выводятся на один рисунок
исравниваются параметры различной размерности ит.п.
c0—Задаличерныйцвет
dummy=setcolor(0)
cРисуемосьOX
x1=0.0d0
cГрафик2D
if(mez.eq.0)x1=xxmin
if(xzm.eq.0.0d0.and.yzm.eq.0.0d0)x1=xxmin
y1=0.0d0
callmoveto_w(x1,y1,s)
x2=xxmax
dummy=lineto_w(x2,y1)
cГрафик(3D)
if(mez.eq.0)goto18
if(xzm.eq.0.0d0.and.yzm.eq.0.0d0)goto18
cРисуемлиниюOZ
x1=0.0d0-zmin*xzm
y1=0.0d0-zmin*yzm
callmoveto_w(x1,y1,s)
x2=-zmax*xzm
y2=-zmax*yzm
dummy=lineto_w(x2,y2)

118 Глава 2. Обработка графической информации
c7—бело-голубойцвет
dummy=setcolor(7)
cЗамыкаемгоризонтальнуюплощадку
x2=x2+xmax
dummy=lineto_w(x2,y2)
x2=x1+xmax
dummy=lineto_w(x2,y1)
dummy=lineto_w(x1,y1)
cЛеваягоризонтальнаяплощадка
x2=-zmax*xzm
y2=-zmax*yzm
callmoveto_w(x2,y2,s)
x2=x2+xmin
dummy=lineto_w(x2,y2)
x2=xmin-zmin*xzm
dummy=lineto_w(x2,y1)
dummy=lineto_w(x1,y1)
cЛеваястенка
x2=xmin-zmax*xzm
y2=-zmax*yzm
callmoveto_w(x2,y2,s)
y2=y2+ymax
dummy=lineto_w(x2,y2)
x2=xmin-zmin*xzm
y2=ymax-zmin*yzm
dummy=lineto_w(x2,y2)
y2=ymin-zmin*yzm
dummy=lineto_w(x2,y2)
cПраваястенка
x2=xmax-zmax*xzm
y2=-zmax*yzm
callmoveto_w(x2,y2,s)

Пример 10. Рисование графиков (фрагменты программы)
y2=y2+ymax
dummy=lineto_w(x2,y2)
x2=xmax-zmin*xzm
y2=ymax-zmin*yzm
dummy=lineto_w(x2,y2)
y2=ymin-zmin*yzm
dummy=lineto_w(x2,y2)
cЗадняястенка
x2=xmax-zmin*xzm
y2=ymax-zmin*yzm
callmoveto_w(x2,y2,s)
x2=xmin-zmin*xzm
dummy=lineto_w(x2,y2)
cЗадняястенка(обратнаяосьOZ)
x2=xmax-zmax*xzm
y2=ymax-zmax*yzm
callmoveto_w(x2,y2,s)
x2=xmin-zmax*xzm
dummy=lineto_w(x2,y2)
119
c0—задаличерныйцвет
dummy=setcolor(0)
cГоризонтальныештрихипоосиZсправа
do181jgra=ngraf1,ngraf2
zjgra=z(jgra)
x1=xmax-zjgra*xzm
y1=-zjgra*yzm
cНачалолиниивточкеx1,y1
callmoveto_w(x1,y1,s)
x2=x1+ddx*5
cРисуемпрямуюлиниюдоточкиx2,y1
dummy=lineto_w(x2,y1)

120 Глава 2. Обработка графической информации
yc=zjgra*zzz0
ay=dabs(yc)
cЗаписываемзначениеycвсимвольнуюпеременнуюnle
write(nle,35)yc
if(ay.ge.0.00001d1)write(nle,305)yc
if(ay.ge.0.0001d1)write(nle,304)yc
if(ay.ge.0.001d1)write(nle,303)yc
if(ay.ge.0.01d1)write(nle,302)yc
if(ay.ge.0.1d2)write(nle,301)yc
if(ay.ge.1.0d2)write(nle,300)yc
cСтавимзначенияпоосиZ(выводимтекстnleнаэкранрядомс
cосьюZ)
calloutgtext(nle)
181continue
18continue
cКонецрисованиясетки
c0—черныйцвет
dummy=setcolor(0)
nrisunkow=1
irisunka=1
kugr=0
cГрафик2D
if(ngraf.eq.1)ngraf1=1
if(ngraf.eq.1)ngraf2=1
cРисуемграфики3D.
cПереборграфиковвобратномпорядке(начинаемссамого
cдальнего)
do5000jgra=ngraf2,ngraf1,(-1)
cПерестановка(координатыxрисуемыхточекрасполагаютсяв
cмассивеxgr)
do55111i=1,nwrem
ij=i+nwrem*(jgra-1)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
