Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обработка текстовой и графической информации
.pdf
Пример 10. Рисование графиков (фрагменты программы)
x(i)=xgr(ij)
55111continue
zjgra=0.0d0
cГрафик(3D)СдвигграфикапоосиZ(zjgra)
if(mez.ne.0)zjgra=z(jgra)
xz=-zjgra*xzm
yz=-zjgra*yzm
cВыборцветаграфика
ijzw=ijzwZ(jgra)
if(mezw.eq.0)ijzw=0
dummy=setcolor(ijzw)
k1=nwrem*(jgra-1)+kugr
cПерваяточкаграфика(n1=1)
ij=n1+k1
x1=x(n1)
y1=ygr(ij)
cГрафикCp
if(mez.eq.(-1))y1=-y1
121
cГрафик2D.Проставляемзначенияуглаalphaнаграфике.
cОбход,еслитолькоодинграфик
if(ngraf.eq.1)goto9920
if(mez.ne.0)goto9920
if(xzm.ne.0.0d0.or.yzm.ne.0.0d0)goto9920
x2=x1-ddx*2*(mefont+5)
y2=ymin+ddy*0.5*mefont*jgra
callmoveto_w(x2,y2,s)
zjgra=z(jgra)
yc=zjgra*zzz0
ay=dabs(yc)
write(nle,35)yc
if(ay.ge.0.00001d1)write(nle,305)yc

122 Глава 2. Обработка графической информации
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
jg=jgra
9921if(jg.gt.5)jg=jg-5
if(jg.gt.5)goto9921
cВыборцветалинии
ijzw=ijzwZ(jgra)
if(mezw.eq.0)ijzw=0
dummy=setcolor(ijzw)
calloutgtext(nle)
cРисуемлиниюотцифрыкграфику(сноска)
dummy=lineto_w(x1,y1)
9920continue
cКонецграфик2D
cГрафик3D
x1=x1+xz
y1=y1+yz
cЗаполнениемассивовточекдлякривойсглаживания
x1kt(1)=x1
y1kt(1)=y1
cОбход3D
if(xzm.eq.0.0d0.and.yzm.eq.0.0d0)goto52147
if(mez.eq.0)goto52147
cИдемнасглаживание
if(mesglag.ne.0)goto55001
cИдемнарисованиетонкойлинии
if(metol.eq.0)goto55001
cОбход3D
if(mez.ne.1)goto52147

Пример 10. Рисование графиков (фрагменты программы)
cВыборцветалиниипозначениюY1p(график3D)
ijzw=0
do5147kkk=1,10
if((y1p-yz).lt.yzw(kkk))goto5147
ijzw=ijzwY(kkk)
5147continue
dummy=setcolor(ijzw)
cРисуемтолстуюлинию(рисуемвточкахэллипсы)
52147continue
wx1=x1+ddx*metol*0.01d0
wy1=y1+ddy*metol*0.01d0
wx2=x1-ddx*metol*0.01d0
wy2=y1-ddy*metol*0.01d0
dummy=ellipse_w($gllinterior,wx1,wy1,wx2,wy2)
55001continue
cРисованиеточекграфика
n12=n1+1
if(mesglag.eq.3)n12=n1
cПереборточекграфика
do22iii=n12,n2
ij=iii+k1
x1=x(iii)
y1=ygr(ij)
if(x1.gt.xmax)x1=xmax
cГрафикCp
if(mez.eq.(-1))y1=-y1
x1=x1+xz
y1=y1+yz
callmoveto_w(x1,y1,s)
123
cКонецграфики3D
cГрафики2D
if(xzm.eq.0.0d0.and.yzm.eq.0.0d0)goto62147

124 Глава 2. Обработка графической информации
if(mesglag.ne.0)goto66001
if(mez.eq.0)goto62147
if(mez.eq.2)goto62147
cВыборцветапозначениюY1p
ijzw=0
do6147kkk=1,10
if((y1p-yz).lt.yzw(kkk))goto6147
ijzw=ijzwY(kkk)
6147continue
dummy=setcolor(ijzw)
62147continue
cРисуемтолстуюлинию(заполняемлиниюэллипсами)
if(metol.eq.0)goto66001
wx1=x1+ddx*metol*0.01d0
wy1=y1+ddy*metol*0.01d0
wx2=x1-ddx*metol*0.01d0
wy2=y1-ddy*metol*0.01d0
dummy=ellipse_w($gllinterior,wx1,wy1,wx2,wy2)
66001continue
cЗаполнениемассиваточекдлясглаживаниякривой
kkt=iii-n1+1
c(Размермассиваограниченвеличиной100000)
x1kt(kkt)=x1
y1kt(kkt)=y1
cРисуемпрямыелиниимеждуточками
if(mesglag.ne.3)goto988
if(iii.eq.n12)callmoveto_w(x1,y1,s)
if(iii.eq.n12)x2=x1
if(iii.eq.n12)y2=y1

Пример 10. Рисование графиков (фрагменты программы)
cРисуемтонкуюлиниюграфика
if(metol.le.0)dummy=lineto_w(x2,y2)
cРисуемтолстуюлиниюграфика
if(metol.le.0)goto20001
cВставляемпромежуточныеточки(используемлинейную
cзависимость).Вданномпримереиспользуем240точек
do20450jjjj=1,240
x1p=(x2*(240-jjjj)+x1*(jjjj-1))/239.0d0
y1p=(y2*(240-jjjj)+y1*(jjjj-1))/239.0d0
cОбход
if(mez.ne.1)goto2148
cВыборцветалиниипозначениюY1p
ijzw=0
do148kkk=1,10
if((y1p-yz).lt.yzw(kkk))goto148
ijzw=ijzwY(kkk)
148continue
dummy=setcolor(ijzw)
2148continue
125
cРазмерыэллипса
wx1=x1p+ddx*metol*0.01d0
wy1=y1p+ddy*metol*0.01d0
wx2=x1p-ddx*metol*0.01d0
wy2=y1p-ddy*metol*0.01d0
cРисуемэллипс
dummy=ellipse_w($gllinterior,wx1,wy1,wx2,wy2)
20450continue
20001continue
988continue
cКонецрисуемпрямыелиниимеждуточкамиграфика
c(mesglag=3)

126 Глава 2. Обработка графической информации
x2=x1
y2=y1
cОбходрисованиясимволов,еслистроитсятолькоодинграфик
if(ngraf.eq.1)goto22
if(mez.ne.0)goto22
cРисуемсимволы(маркеры)награфиках
wx1=x1+dddx
wy1=y1+dddy
wx2=x1-dddx
wy2=y1-dddy
cЭллипс
if(jgra.eq.1)
*dummy=ellipse_w($gllinterior,wx1,wy1,wx2,wy2)
cПрямоугольник
if(jgra.eq.2)
*dummy=rectangle_w($gllinterior,wx1,wy1,wx2,wy2)
cКрест
if(jgra.eq.3)callkrest(ijzw,x1,y1,dddx,dddy)
cРомб(закрашен)
if(jgra.eq.4)callromb(ijzw,x1,y1,dddx,dddy,raz,1)
cТреугольник
if(jgra.eq.5)calltreugolnik1(ijzw,x1,y1,dddx,dddy,0)
cТреугольник(закрашен)
if(jgra.eq.6)calltreugolnik1(ijzw,x1,y1,dddx,dddy,1)
cПеревернутыйтреугольник
if(jgra.eq.7)calltreugolnik2(ijzw,x1,y1,dddx,dddy,0)
cПеревернутыйтреугольник(закрашен)
if(jgra.eq.8)calltreugolnik2(ijzw,x1,y1,dddx,dddy,1)
cРомб
if(jgra.eq.9)callromb(ijzw,x1,y1,dddx,dddy,raz,0)
cДиагональныйкрест
if(jgra.eq.10)callkrestdiag(ijzw,x1,y1,dddx,dddy)
cВернулиськточкеграфика

Пример 10. Рисование графиков (фрагменты программы)
callmoveto_w(x1,y1,s)
22continue
2222continue
cКонецрисованияточекграфика
cЗаливказамкнутогографикацветом
if(mez.le.1)goto5000
if(mezal.eq.0)goto5000
cВыбормаскиштриховки
if(mezal.eq.2)callsetllmask(hatch)
if(mezal.eq.3)callsetllmask(hatch3)
if(mezal.eq.4)callsetllmask(hatch4)
if(mezal.eq.5)callsetllmask(hatch5)
if(mezal.eq.6)callsetllmask(hatch6)
if(mezal.eq.7)callsetllmask(hatch7)
cВыбралиопорнуюточкудлязаливкизамкнутойобласти
wx1=0.25*(x(1)+x(5)+xgr(n2-5)+xgr(n2-1))+xz
wy1=0.25*(ygr(k1+1)+ygr(k1+5)+ygr(k1+n2-5)
*+ygr(k1+n2-1))+yz
cВыборцвета
BOUNDARY=ijzw
dummy=oodll_w(wx1,wy1,boundary)
5000continue
cВернулисплошнуюмаску
callsetllmask(hatch8)
6000continue
127
cОбходварианта2D
if(xzm.ne.0.0d0.or.yzm.ne.0.0d0)goto99000
if(mez.ne.0)goto99000
if(mesglag.ne.3)goto99000
cРисуемпрямыелиниимеждуточками
ijcc=12
dummy=setcolor(ijcc)

128 Глава 2. Обработка графической информации
cРисованиеграфикаспомощьюмногоугольника.Это
cобеспечиваетболеевысокуюскоростьобработки,чтоважнопри
cбольшомколичестверисуемыхточек
nwremmm=n2-n1+1
k1=0+n1-1+kugr
sdwigy=0.0d0
cИмеетсяограничение-размермассиваpoints(32767).
cПоэтомуделимграфикначастименьшегоразмера,например,
cпо15000точек.
nkus=nwremmm/15000
nhwost=nwremmm-15000*nkus
if(nhwost.gt.2)nkus=nkus+1
if(nkus.le.0)nkus=1
cПереборчастейграфика
do160kus=1,nkus
nwremkus=15000
if(kus.eq.nkus)nwremkus=nhwost
cПерваяточкачастиграфика
ij=1+k1
x1=x(ij)
y1=ygr(ij)
wx2=x1
wy2=y1
points(1).wx=x1
points(1).wy=y1
cОстальныеточкичастиграфика
do5024i=2,nwremkus
ij=i+k1
x1=x(ij)
y1=ygr(ij)
cГраницаграфика
if(x1.gt.xmaxs)x1=xmaxs

Пример 10. Рисование графиков (фрагменты программы)
cЗаполнениемассивамногоугольникакоординатамиточек
cграфика
points(i).wx=x1
points(i).wy=y1
5024continue
5021continue
cЗамыканиемногоугольникачерезосьOX,добавляем2точки-в
cначалеивконцерисуемойчастиграфика
nn2=nwremkus+2
points(nwremkus+1).wx=x1
points(nwremkus+1).wy=sdwigy
points(nwremkus+2).wx=wx2
points(nwremkus+2).wy=sdwigy
cРисуемнаэкранеполученныймногоугольник
dummy2=POLYGON_W($GBORDER,points,nn2)
cУбираемзамыкающиевертикальныелиниимногоугольника
c(рисуемповерхзамыкающихлинийновыелиниибелымцветом)
c15—белыйцвет
dummy=setcolor(15)
cНачальнаявертикальнаялиния
callmoveto_w(wx2,wy2,s)
dummy=lineto_w(wx2,sdwigy)
cКонечнаявертикальнаялиния
callmoveto_w(x1,y1,s)
dummy=lineto_w(x1,sdwigy)
cПодготовилиськрисованиюследующейчастиграфика.
cВернулицветлинииграфика
dummy=setcolor(ijcc)
ijzw=ijcc
k1=k1+15000
160continue
cКонецпереборачастейграфика
129

130 Глава 2. Обработка графической информации
99000continue
5999continue
cКонецрисованияграфиков
c0—задаличерныйцвет
dummy=setcolor(0)
cПовторнорисуемосьX(3D)
x2=xmin-zmin*xzm
y2=-zmin*yzm
callmoveto_w(x2,y2,s)
x2=x2+xmax
if(mez.ne.0)dummy=lineto_w(x2,y2)
cОбрамлениеграфика(2D)—рисуемпрямоугольник
if(mez.eq.0)
*dummy=rectangle_w($gborder,xmins,ymaxs,xmaxs,ymins)
cЗаголовкиосей
widfont1(1)='i'
if(metipfont.eq.0)dummy=setfont("t'courier'"//widfont)
if(metipfont.eq.1)dummy=setfont("t'TimesNew
*Roman'"//widfont)
if(metipfont.eq.2)dummy=setfont("t'ArialBlack'"//
*widfont)
cОбозначениеосиOY,цифрыслеваотсетки
x3=xmin-4*(mefont+2)*ddx-zmin*xzm
if(mez.eq.0)x3=xmin-2*(mefont+2)*ddx-zmin*xzm
y3=ymax+20*ddy-zmin*yzm
callmoveto_w(x3,y3,s)
calloutgtext(Yzagol)
cОбозначениеосиOX,цифрывнизуотоси
x2=xmin+1.01d0*xxx-zmin*xzm
y3=ymin-0.1d0*yyy-zmin*yzm
callmoveto_w(x2,y3,s)
calloutgtext(Xzagol)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
