program draw integer i,x,y real*8 q(0:639,0:639) real*8 qmin,qmax real colors(0:639,0:639) real grays(0:255) real c real color d=g2_open_vd() c откроем графическое окно размером 640x640 d1=g2_open_X11(640.0, 640.0) call g2_attach(d, d1) c подготавливаем 255 возможных оттенков серого do i=0,254 grays(i)=g2_ink(d1,i/254.0,i/254.0,i/254.0) enddo c подготавливаем массив плотности (произвольным образом) c вместо чтения из fifo-файла или pvm-сообщения заполняем массив вручную c в реальной задаче вместо этого куска кода будет c стоять один оператор чтения данных из файла или c операторы приема сообщения и распаковки его в массив do x=0,639 do y=0,639 q(x,y)=sqrt(abs((300.0*300.0)-(x*y*1.0))) enddo enddo c //////////////////////////////////////////////////////////// c вычисляем максимум и минимум плотности qmin=q(0,0) qmax=q(0,0) do x=0,639 do y=0,639 if(qmin.gt.q(x,y)) then qmin=q(x,y) endif if(qmax.lt.q(x,y)) then qmax=q(x,y) endif enddo enddo c вычисляем цвета пикселей do x=0,639 do y=0,639 c //конформно отражаем распределение плотностей c //к диапазону 0-254 и в качестве цвета пикселя c //берем целую часть от полученной величины c=((254*(q(x,y)-qmin))/(qmax-qmin)) colors(x,y)=grays(c) enddo enddo c рисуем распределение плотности в графическом окне X-Windows call g2_image(d1,0.0,0.0,640.0,640.0,colors) c call g2_line(d1,15.0,15.0,20.0,20.0) c рисуем белый прямоугольник в котором расположим текст color = g2_ink(d1,1.0,1.0,1.0) call g2_pen(d1,color) call g2_filled_rectangle(d1,15.0,15.0,80.0,35.0) c рисуем черным цветом подпись к картинке в c нарисованном белом прямоугольнике color = g2_ink(d1,0.0,0.0,0.0); call g2_pen(d1,color); call g2_string(d1,20.0,20.0,"Test field") call g2_flush(d1) c немножко поспим чтобы можно было полюбоваться с полученной картинкой read (*,*) a call g2_close(d1) stop end