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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Пример 10. Рисование графиков (фрагменты программы)
x(i)=xgr(ij) 55111continue
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)goto9920 if(mez.ne.0)goto9920 if(xzm.ne.0.0d0.or.yzm.ne.0.0d0)goto9920 x2=x1-ddx*2*(mefont+5) y2=ymin+ddy*0.5*mefont*jgra callmoveto_w(x2,y2,s) zjgra=z(jgra) yc=zjgra*zzz0 ay=dabs(yc) write(nle,35)yc if(ay.ge.0.00001d1)write(nle,305)yc
122 Глава 2. Обработка графической информации
if(ay.ge.0.0001d1)write(nle,304)yc if(ay.ge.0.001d1)write(nle,303)yc if(ay.ge.0.01d1)write(nle,302)yc if(ay.ge.0.1d2)write(nle,301)yc if(ay.ge.1.0d2)write(nle,300)yc jg=jgra 9921if(jg.gt.5)jg=jg-5 if(jg.gt.5)goto9921 cВыборцветалинии ijzw=ijzwZ(jgra) if(mezw.eq.0)ijzw=0 dummy=setcolor(ijzw) calloutgtext(nle) cРисуемлиниюотцифрыкграфику(сноска) dummy=lineto_w(x1,y1) 9920continue 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)goto52147 if(mez.eq.0)goto52147 cИдемнасглаживание if(mesglag.ne.0)goto55001 cИдемнарисованиетонкойлинии if(metol.eq.0)goto55001 cОбход3D if(mez.ne.1)goto52147
Пример 10. Рисование графиков (фрагменты программы)
cВыборцветалиниипозначениюY1p(график3D) ijzw=0 do5147kkk=1,10 if((y1p-yz).lt.yzw(kkk))goto5147 ijzw=ijzwY(kkk) 5147continue dummy=setcolor(ijzw)
cРисуемтолстуюлинию(рисуемвточкахэллипсы) 52147continue 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($gllinterior,wx1,wy1,wx2,wy2) 55001continue
cРисованиеточекграфика n12=n1+1 if(mesglag.eq.3)n12=n1 cПереборточекграфика do22iii=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 callmoveto_w(x1,y1,s)
123
cКонецграфики3D
cГрафики2D if(xzm.eq.0.0d0.and.yzm.eq.0.0d0)goto62147
124 Глава 2. Обработка графической информации
if(mesglag.ne.0)goto66001 if(mez.eq.0)goto62147 if(mez.eq.2)goto62147
cВыборцветапозначениюY1p ijzw=0 do6147kkk=1,10 if((y1p-yz).lt.yzw(kkk))goto6147 ijzw=ijzwY(kkk) 6147continue dummy=setcolor(ijzw)
62147continue cРисуемтолстуюлинию(заполняемлиниюэллипсами) if(metol.eq.0)goto66001 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($gllinterior,wx1,wy1,wx2,wy2) 66001continue
cЗаполнениемассиваточекдлясглаживаниякривой kkt=iii-n1+1 c(Размермассиваограниченвеличиной100000)
x1kt(kkt)=x1 y1kt(kkt)=y1
cРисуемпрямыелиниимеждуточками if(mesglag.ne.3)goto988 if(iii.eq.n12)callmoveto_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)goto20001 cВставляемпромежуточныеточки(используемлинейную cзависимость).Вданномпримереиспользуем240точек do20450jjjj=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)goto2148 cВыборцветалиниипозначениюY1p ijzw=0 do148kkk=1,10 if((y1p-yz).lt.yzw(kkk))goto148 ijzw=ijzwY(kkk) 148continue dummy=setcolor(ijzw) 2148continue
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($gllinterior,wx1,wy1,wx2,wy2) 20450continue 20001continue
988continue cКонецрисуемпрямыелиниимеждуточкамиграфика c(mesglag=3)
126 Глава 2. Обработка графической информации
x2=x1 y2=y1
cОбходрисованиясимволов,еслистроитсятолькоодинграфик if(ngraf.eq.1)goto22 if(mez.ne.0)goto22 cРисуемсимволы(маркеры)награфиках wx1=x1+dddx wy1=y1+dddy wx2=x1-dddx wy2=y1-dddy cЭллипс if(jgra.eq.1) *dummy=ellipse_w($gllinterior,wx1,wy1,wx2,wy2) cПрямоугольник if(jgra.eq.2) *dummy=rectangle_w($gllinterior,wx1,wy1,wx2,wy2) cКрест if(jgra.eq.3)callkrest(ijzw,x1,y1,dddx,dddy) cРомб(закрашен) if(jgra.eq.4)callromb(ijzw,x1,y1,dddx,dddy,raz,1) cТреугольник if(jgra.eq.5)calltreugolnik1(ijzw,x1,y1,dddx,dddy,0) cТреугольник(закрашен) if(jgra.eq.6)calltreugolnik1(ijzw,x1,y1,dddx,dddy,1) cПеревернутыйтреугольник if(jgra.eq.7)calltreugolnik2(ijzw,x1,y1,dddx,dddy,0) cПеревернутыйтреугольник(закрашен) if(jgra.eq.8)calltreugolnik2(ijzw,x1,y1,dddx,dddy,1) cРомб if(jgra.eq.9)callromb(ijzw,x1,y1,dddx,dddy,raz,0) cДиагональныйкрест if(jgra.eq.10)callkrestdiag(ijzw,x1,y1,dddx,dddy)
cВернулиськточкеграфика
Пример 10. Рисование графиков (фрагменты программы)
callmoveto_w(x1,y1,s) 22continue 2222continue cКонецрисованияточекграфика
cЗаливказамкнутогографикацветом if(mez.le.1)goto5000 if(mezal.eq.0)goto5000 cВыбормаскиштриховки if(mezal.eq.2)callsetllmask(hatch) if(mezal.eq.3)callsetllmask(hatch3) if(mezal.eq.4)callsetllmask(hatch4) if(mezal.eq.5)callsetllmask(hatch5) if(mezal.eq.6)callsetllmask(hatch6) if(mezal.eq.7)callsetllmask(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=oodll_w(wx1,wy1,boundary) 5000continue cВернулисплошнуюмаску callsetllmask(hatch8) 6000continue
127
cОбходварианта2D if(xzm.ne.0.0d0.or.yzm.ne.0.0d0)goto99000 if(mez.ne.0)goto99000 if(mesglag.ne.3)goto99000 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Переборчастейграфика do160kus=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Остальныеточкичастиграфика do5024i=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 5024continue 5021continue
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(рисуемповерхзамыкающихлинийновыелиниибелымцветом) c15—белыйцвет dummy=setcolor(15) cНачальнаявертикальнаялиния callmoveto_w(wx2,wy2,s) dummy=lineto_w(wx2,sdwigy) cКонечнаявертикальнаялиния callmoveto_w(x1,y1,s) dummy=lineto_w(x1,sdwigy) cПодготовилиськрисованиюследующейчастиграфика. cВернулицветлинииграфика dummy=setcolor(ijcc) ijzw=ijcc k1=k1+15000 160continue cКонецпереборачастейграфика
129
130 Глава 2. Обработка графической информации
99000continue 5999continue cКонецрисованияграфиков
c0—задаличерныйцвет dummy=setcolor(0) cПовторнорисуемосьX(3D) x2=xmin-zmin*xzm y2=-zmin*yzm callmoveto_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'TimesNew *Roman'"//widfont) if(metipfont.eq.2)dummy=setfont("t'ArialBlack'"// *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 callmoveto_w(x3,y3,s) calloutgtext(Yzagol) cОбозначениеосиOX,цифрывнизуотоси x2=xmin+1.01d0*xxx-zmin*xzm y3=ymin-0.1d0*yyy-zmin*yzm callmoveto_w(x2,y3,s) calloutgtext(Xzagol)
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]