[LinuxFocus-icon]
Ev  |  Erişimdüzeni  |  İçindekiler  |  Arama

Duyumlar | Belgelikler | Bağlantılar | LF Nedir
Bu makalenin farklı dillerde bulunduğu adresler: English  Deutsch  Francais  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[bayboraseckin]
tarafından Baybora Baran ve Seçkin Gökaltun
<baybora(at)be.itu.edu.tr, gokaltun(at)itu.edu.tr>

Yazar hakkında:

Bizler Istanbul Teknik Universitesi, Bilisim Enstitüsü`nde çalisan arastirma görevlisi olarak çalisiyoruz ve mühendislik uygulamalirnda Linux kullaniyoruz... Seckin'nin, sanal doku yöresi www.be.itu.edu.tr/~seckin



Türkçe'ye çeviri:
Murat Pektaş <pektas(at)be.itu.edu.tr>
Çiğdem Yıldız <cigdemyildiz(at)be.itu.edu.tr>

İçerik:

 

Linux Altinda Etkilesimli Grafikler için PGPLOT Kullanilmasi

[PgPlot for Linux]

Özet:

Bu makalede; Fortran programlama dilinde etkilesimli grafiklerle nasil program yazilacagini ögreneceksiniz. PGPlot, Fortran kodumuzda yazmamiz gereken bir altprogramciklar listesidir.PGPlot altprogramciklarinin kurulumunu ve bazi uygulamalarini anlatacagiz ve PGPlot`la yapabileceginiz uygulamalarla ilgili bir fikir vermek için Fortran kodlarinin da bulundugu iki örnek verecegiz.

_________________ _________________ _________________

 

Giris

 

PGPLOT nedir?

PGPLOT grafik kütüphanesi Fortran ve C tarafindan çagirilabilen, basit bilimsel grafikler yapmak için kullanilan aygittan bagimsiz bir grafik paketidir. Minimum çaba harcayarak yayim kalitesinde grafikler hazirlamak için tasarlanmistir. Bir çok uygulama için program aygita bagimli olabilir ve çikti program kosarken aygita yönlendirilmis olabilir.

PGPlot kütüphanesi iki ana kisimdan olusur: aygittan bagimsiz ve çesitli görüntü göstericiler, nokta vuruslu yazicilar, lazer yazicilar ve kalemli yazicilardan çikti alabilmek için aygita bagimli kisimdir. Postscrip ve GIF da dahil olmak üzere yaygin olan doysa biçimlerini destekler. PGPlot un kedisi de çogunlukla Fortran-77 de yazilmistir.

PGPLOT alt programciklari Fortran-77 veya Fortran-90 gibi programlardan direkt olarak çagirilabilir. C baglanti kütüphanesi (cpgplot) ve baslik dosyasi (cpgplot), PGPLOT’ un C veya C++ programlarindan çagrilabilmesini saglamaktadir; bu baglanti kütüphanesi C ve Fortran arasinda irtibati saglar. PGPLOT Unix (çogunlukla Linux, SunOS, Solaris, HPUX, AIX, ve Irix’leri içeren çesitleri) ve OpenVMS isletim sistemleri ile test edilmistir.

PGPLOT kamuya açik olmayan bir yazilim olmakla birlikte ticari maksatla kullanilmaz. Kaynak kodu ve dökümantasyonu California Institute of Technology tarafindan çok az standart disi ve sistem bagimli alt programciklar ile telif hakki alinmistir. Yükleme dosyasini ve yol göstermeleri edinmek için buraya tkla.

 

Bazi Örnekler

Asagida PGPlot in yapabileceklerine dair bazi PGPlot uygulamalari sunuyoruz.

Örnek 1) Scatter Plots:
[Example1]

Örnek 2) Function Plots:
[Example2]

Örnek 3) Contour Maps:
[Example3]

Örnek 4) Images:
[Example4]

Örnek 5) Histograms:
[Example5]

 

UNIX Sistemler için Kurulum

Not: Takip eden açiklamalar iki dizine aittir. Bunlar; PGPlot kaynak kod agacini barindiran kaynak dizini ve makina özellik kütüphanelerinin, veri dosyalarinin ve uygulama programlarinin yaratilacagi hedef dizinidir. Bunlar için bos dizinler yaratmaniz önerilir.Bunlar ayni didnler olmamalidir. Örneklerimizde bu dizinler asagidaki isimlerle yaratilmistir.

/usr/local/src/pgplot (kaynak dizin)
/usr/local/pgplot (hedef dizin)

fakat baska isimlerde kullanilabilir. PGPlot yüklerken (root) haklarinizin oldugu varsayilmaktadir.PGPlot un farkli mimariler için olan versiyonlarini farkli hedef dizinlere yüklemek için tek bir kaynak dizin kullanilabilinir.

Burada kisaca PGPlot altporgramciklarinin Linux altinda yüklenmesi anlatilmistir. Daha fazla bilgi için tjp(At)astro.caltech.edu adresine elektronik ileti gönderebilirsiniz.  

Kaynak dosyayi kopyalama

Kaynak dosyayi Caltech. den anonymous FTP ile kopyalayin. ftp.astro.caltech.edu adresine (user: anonymous, password: your@email) ile girin. Kaynak dosya gzip ile sikistirilmis bir UNIX tar dosyasidir. Dosyayi almak için asagidaki FTP komutlarini izleyin:

cd pub/pgplot
binary
hash
get pgplot5.2.tar.gz

Bu dizindeki metin dosyalari ayrica tar dosyasinin içinde de bulunmaktadir.

Kaynak dosya ayrica su adresten alinabilir. ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz.  

Dosyalarin açilmasi

Arsivi ve içeriklerini açmak için gunzip ve tar kullanin. Bu islemle geçerli dizinde pgplot (ve alt dizinlerini) yaratmis olacak. Geçerli dizininizin "PGPlot kaynak" dizin agacini yaratmak istediginiz dizin oldugundan emin olun.

cd /usr/local/src
gunzip -c pgplot5.2.tar.gz | tar xvof -

Bu örnek pgplot dizinini ve alt dizinlerini su dizinde; /usr/local/src/pgplot yaratir.  

Hedef dizinin yaratilmasi

PGPlot kütüphanesini ve gerekli dosyalarinin yaratilabilecegi, yazilabilir bir dizin olusturun. Destek vermek istediginiz her bir farkli isletim sistemi ve derleyici kombinasyonu ("hedef sistem") için böyle bir dizin gerekir. Örnegin;

mkdir /usr/local/pgplot

Kaynak dizin altinda PGPlot kütüphanesi yaratmaya çalismayin.  

Aygit sürücülerinin seçilmesi

Aygit sürücülerini var olan listeden seçerek PGPlot u konfigüre edin. Ilk olarak, drivers.list dosyasini kaynak dizininden dosyasini hedef dizinine kopyalayin ve sonra aygit sürücülerini seçmek için bir metin editörü kullanin. Bu dosyada her satir uygun aygit sürücüsünü içerir. Sürücüyü kullanabilmek için basindaki (!) isaretini kaldirin veya aygit sürücünü devre disi birakmak için (!) isaretini tekrar yazin. Bir çok sürücü sadece belli isletim sistemlerinde kullanilabilir (drivers.list deki notlara bakiniz.) su halde sadece kullanmayi tasarladiginiz sürücüleri aktive edin. PGPlot daha sonra yeniden kuruluma bu adimdan baslanarak tekrar düzenlenebilir. Çogu kurulum sunlari içermelidir: geçersiz(null) aygit (/NULL), Postscript yazicilari (/PS, /VPS, /CPS, ve /VCPS), Tektronix terminalleri (/TEK,/XTERM, ve diger olasi çesitler), ve eger X Window sistemi hedefte varsa, X Window sürücüleri (/XWINDOW, /XSERVE). Ayrica GIF dosyalari için veya diger bazi yazicilar için sürücüler eklemek isteyebilirsiniz.
    cd /usr/local/pgplot
    cp /usr/local/src/pgplot/drivers.list .
    vi drivers.list  (veya tercih ettiginiz editörü kullanin.)
 

Makefile yaratmak

UNIX için PGPLOT donanim prosedürü sizin isletme sisteminiz, derleyiciler, ve seçilmis PGPLOT aygit sürücüleri için bir standart UNIX makefile' ini olusturmak için makemakeadi verilen bir alfabe kullanir.Isletim sistemi ve derleyici bilgisi konfigürasyon dosyasindan saglanir.Eger sizin konfigürasyonun bu listelenmislerden biri degilse, ya da olusturulmus makefile' i kullanmada zorlaniyorsaniz, kendi konfigürasyon dosyanizi yaratma hakkindaki bilgi için asagidakine bakin.

Not edilmesi gerekir ki, konfigürasyon dosyalari özel isletim sistemlerinde özel derleyiciler içindir. Örnegin, kendi sistemini kurduysaniz ve komut f77 bir GNU g77 derleyici ister, o zaman bir SPARC f77 derleyici için dizayn edilmis bir konfigürasyon dosyasi kullanamazsiniz. Özel bir konfigürasyon dosyasi yaratmak zorunda kalirsiniz. Asagidaki tabloda, Arg#2 isletme sistemi için bir koddur, ve Arg#3 Fortran ve C derleyicileri için bir koddur. Destekleyici sistemler hakkinda daha fazla bilgi için, pgplot/sys_*/aaaread.me dosyasina bakin.
 ------  ------
    aix     xlf_cc
    alliant fortran_cc
    bsd     g77_gcc
    convex  fc_cc
    cray    cf77_cc
    epix2   f77_cc         (Control Data EP/IX 2.x)
    freebsd f77_cc
    fujitsu uxpm_frt_cc
    fujitsu uxpv_frt_cc
    hp      fort77_c89
    hp      fort77_gcc
    irix    f77_cc
    linux   absoft_gcc
    linux   f77_gcc
    linux   g77_elf
    linux   g77_gcc
    next    af77_cc
    next    f2c_cc
    next    g77_cc
    next    gf77_cc
    osf1    f77_cc
    osf1    f77_cc_shared
    sol2    f77_cc         (Solaris 2.x, SunOs 5.x)
    sol2    f77_gcc
    sol2    f90_cc
    sol2    g77_gcc
    sun4    f77_acc        (SunOS 4.x)
    sun4    f77_cc
    sun4    f77_gcc
    ultrix  f77_cc
Eger sistemin listelenmislerden biri ise asagidaki gibi ilerler: bir hedef dizin olusturun, örnegin,
  cd /usr/local/pgplot 
dagitim dizininden makemake alfabesini uygulayin.Örnegin;
/usr/local/src/pgplot/makemake  /usr/local/src/pgplot  linux
makemake' e saglanan ilk argüman dagitim dizininin ismidir. Farkedilmelidir ki, makemake'i çalistirdiginizda, sizin içinde bulunduğunuz öntanimla dizininiz hedef dizininiz olmalidir ki derli kütüphanenizi koydugunuz yer olsun.



Ikinci bir argüman isletme sisteminin adidir(Arg#2 yukaridaki tablodan); onu ihmal ederseniz ya da farkedilmeyen bir isim saglarsaniz, makemake izin verilen degerleri gösterecektir. Birden fazla Fortran ve C derleyicinin mevcut oldugu bazi isletim sistemlerinde ,üçüncü bir argüman gereklidir.( Arg#3 yukaridaki tablodan) ; genellikle bu altçizgi ile ayrilmis iki derleyici ismin birlesimidir. Eger bunu ihmal ederseniz,makemake izin verilen degerleri gösterecektir.

Geçerli argümenleri sagladiginda, makemake drivers.list dosyasini bulamayabilir.Bu durumda 4.adima dönün!.

Örnek

baybora@bilgi>../pgplot/makemake ../pgplot linux g77_gcc
For additional information, read file ../pgplot/sys_linux/aaaread.me
Reading configuration file: ../pgplot/sys_linux/g77_gcc.conf
Selecting uncommented drivers from ./drivers.list
Found drivers NUDRIV PSDRIV XWDRIV
Creating make file: makefile
Determining object file dependencies.

Senaryo makemake sonraki kullanim için bir makefile dosyasi olusturur, seçilmis aygit sürücüsünü çagiran bir Fortran dosyasi grexec.f ve PGSCRN ile kullanimi için renk tanimi içeren bir text dosyasi (eger rgb.txt dosyaniz zaten var ise,bu sizin taniminiza göre degistirilir, makemake degistirmez.).Ayrica derleme sirasinda ihtiyaç duyulacak dosyalari içeren iki Fortran dosyasi kopya eder. Bu yüzden bu asamada en azindan asagidaki dosyalara sahip olacaksiniz;

drivers.list
grexec.f
grpckg1.inc
makefile
pgplot.inc
rgb.txt

Bu dosyalarin yaratildigini kontrol etmelisiniz ve; makemake'in drivers.list ten seçtigin sürücülere uygun buldugunu söyledigi sürücüler listesini kontrol etmelisiniz. Eger UNIX sistemin yukarida listelenen destekleme sistemlerinden biri degilse, hedef rehberde local.confismi ile kendi konfigürasyon dosyanizi yaratin.En iyisi pgplot/sys_*/*.confdan saglanan konfigürasyon dosyalarindan birini kopya etmektir ve o zaman asagida dosyadaki yorumlarda onu yayinlayin. Eger içinde bulundugunuz dizinde varsa ve eger Arg#3 açikça belirtilmemisse makemake prosedürü local.conf 'u kullanacaktir. Unutmayin ki, Arg#2 ( isletim sistemi) yi açikça belirtmelisiniz.  

Kodu derlemek için "make" kullanimi

Simdi asagidaki talimatlari kullanarak PGPLOT kütüphanesini derlemek için UNIX make komutunu kullanin: makefile:

make

Öntanimla, make bir nesne-ölçü birimi kütüphanesini, libpgplot.a; paylasilabilir bir kütüphaneyi (eger mümkünse seçilmis olan isletim sisteminde), çift PGPLOT dosyasi grfont.dat, kullanilisini gösterme programlari pgdemo*, ve bir dokümantasyon dosyasi olan pgplot.doc'u kullanacaktir. Ayrica eger /XWINDOW ve/veya /XSERVE sürücüsü 4.adimda seçildiyse pgxwin_server adli programi yaratir, ve eger /XDISP seçildiyse pgdisp programini yaratir. Eger bu adim tatmin edici bir sekilde yürürse aradaki istenmeyen dosyalari kaldirmak için

make clean

yazabilirsiniz. Daha sonra içinde bulundugunuz dizinde asagidaki dosyalari görebilirsiniz:

drivers.list
grexec.f
grfont.dat (binary font Eger XMDRIV ya da TKDRIV isterseniz, ayrica asagidaki dosyalarin bazilarina sahip olacaksiniz: file)*
libpgplot.a (PGPLOT library)*
libpgplot.so (shared library, optional)*
makefile
pgdemo1 ... pgdemo16 (demonstration programs)
pgdisp (required by /XDISP driver)*
pgplot.doc (ASCII documentation file)
pgxwin_server (required by /XWINDOW driver)*
rgb.txt (color name database)*

Eger XMDRIV veya TKDRIV'yi istiyorsaniz,asagidaki dosyalarin bazilarina da sahip olacaksiniz:

pgmdemo (executable demo program)
libXmPgplot.a (object library required by PGPLOT/Motif applications)*
XmPgplot.h (header file required by PGPLOT/Motif applications)*
libtkpgplot.a (object library required by PGPLOT/Tk applications)*
pgtkdemo (executable demo program)
pgtkdemo.tcl (script used by demo program)
tkpgplot.h (header file required by PGPLOT/Tk applications)*

Eger bir baska dizine PGPLOT 'un derleme versiyonunu kopya etmek isterseniz, en azindan bir yildizla (*) isaretlenmis dosyalari kopya etmelisiniz. Dokümantasyon dosyasi kilavuzdan da erisilebilecek olan PGPLOT altfonksiyon tanimlarini içerir.  

Gösterici programlarin çalistirilmasi

Gösterici programlarini seçtiginiz aygitta çalistiriniz ve dogrulugunu gösteriniz. Herhangi PGPLOT programini çalistirmadan önce, çevre degiskeni PGPLOT_DIR 'in dogru tanimlandigindan emin olun. Bu, PGPLOT'un arayacagi grfont.dat ve rgb.txt dosyalarinin içinde bulundugu dizinin adidir,eger gerekirse X-window sunucu programi; pgxwin_server:

UNIX csh or tcsh: setenv PGPLOT_DIR /usr/local/pgplot/
UNIX sh or bash: PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR

Bu hem uygundur,ama PGPLOT_DEV çevre degiskeni ile birlikte varsayilan PGPLOT aygitini tanimlamak için gerekli degildir.

UNIX csh or tcsh: setenv PGPLOT_DEV /xwindow

Bir UNIX paylasimli kütüphanesi kullaniliyorsa (e.g., on Solaris 2.x),yükleyici yolunuza PGPLOT dizini koymak durumunda olabilirsiniz, bu LD_LIBRARY_PATH çevresel degiskeninde tanimlanmistir.BIr programi çalistirmak için,programin adini (içinde bulundugunuz dizinde degilse içinde bulundugu dizinle birlikte),ve tipini yaziniz.

./pgdemo1

Uygun aygit tiplerini görmek için soru isaretine (?) basin ve PGPLOT'un düzgün kuruldugunu gösterin . Kontrol edilecek noktalar: PGPLOT programi font dosyasini dogru olarak okur ve özel karakterleri (pgdemo2) bastirir; PGPLOT programi renk veritabanini okur(pgdemo10); interaktif aygitlarda imleç dogru olarak çalisir (pgdemo5, pgdemo6).  

Kodunuzu nasil derleyeceksiniz?

PGPLOT altprogram kütüphanesini sisteminize yükledikten sonra , PGPLOT altprogramlarini,asagidaki örnekte oldugu gibi
      INTEGER PGOPEN, I
      REAL XS(9), YS(9), XR(101), YR(101)

C Compute numbers to be plotted.

      DO 10 I=1,101
          XR(I) = 0.1*(I-1)
          YR(I) = XR(I)**2*EXP(-XR(I))
 10   CONTINUE
      DO 20 I=1,9
          XS(I) = I
          YS(I) = XS(I)**2*EXP(-XS(I))
 20   CONTINUE

C Open graphics device.

      IF (PGOPEN('?') .LT. 1) STOP

C Define coordinate range of graph (0 < x < 10, 0 < y < 0.65),
C and draw axes.

      CALL PGENV(0., 10., 0., 0.65,  0,  0)

C Label the axes (note use of \u and \d for raising exponent).

      CALL PGLAB('x', 'y', 'PGPLOT Graph: y = x\u2\dexp(-x)')

C Plot the line graph.

      CALL PGLINE(101, XR, YR)

C Plot symbols at selected points.

      CALL PGPT(9, XS, YS, 18)

C Close the graphics device.

      CALL PGCLOS

      END

Bu, asagidaki grafigi çizmeyi saglamaktadir:

[example]

Yukardaki kodu basarili olarak gerçeklestirebilmek için PGPLOT ve X11 kütüphanelerini kodunuzla birlikte kullanmaniz gerekmektedir. Asagidaki senaryonun gösterdigi gibi;

g77 your_code_name.f -L/X11directory/ -lX11 -L/PGPLOTdirectory/ -lpgplot

Kodunuzu çalistirdiginiz dizinin içinde asagidaki dosyalar bulunmalidir:

grfont.dat
rgb.txt
pgwin server
Bu dosyalari pgplot dizininden kodunuzun bulundugu dizine kopyalayin.  

Uygulama 1: 3 noktadan geçen çember

Bu uygulamada amacimiz fare ile tiklayarak belirlenen üç nokta belirlemek ve Fortran kodu ile daireyi çizmektir. Bu problem Serdar Çelebi tarafindan yönetilen Hesaplamali Geometri dersinde çözülmüstür.

Asagidaki rutinler grafigin çizilecegi alanin arkaplanini ve nasil yerlestiril ecegini tanimlamaktadir. Alt fonksiyonlarin detayli kullanimi PGPLOT kilavuzundan bulunabilir.. ( PGPLOT linkini anasayfanin sonunda bulabilirsiniz.)

..
...
call PGSCR(0,1.0,1.0,1.0) !set color representation
call PGENV(-50.0,50.0,-50.0,50.0,1,1) !set window and viewport and draw labeled frame
call PGSCI(1) !set color index
call PGSFS(2) !set fill-area style
...
..

Asagidaki PGPT1 rutinini fare ile belirlemek istedigimiz noktadaki göstericiyi çizmek için kullanabiliriz.

..
...
WRITE (*,*) 'Cursor mode:', MODE
             GOTO 10
          END IF
           CALL PGPT1(X, Y, 3)  !draw one graph marker
        ic=ic+1
        xp(i)=x
        yp(i)=y

Ekranda 3 farkli nokta belirlendikten sonra, Fortran kodu, merkezi hesaplayarak 3 noktadan geçen çemberin çizer.




    ..
    ...
    c-----find the radius----------------
     r=(xcenter-xp(1))**2+(ycenter-yp(1))**2
     r=r**0.5
    c-----draw the circle-------------------
     call PGCIRC(xcenter,ycenter,r) !draws a circle
     goto 1
    ...
    ..
    

Çemberi yukarida bahsedilen "PGCIRC" rutini ile çizeriz. Siz bu çemberi silip ayni çizim alanina yeni noktalar belirleyerek baska bir çember çizebilirsiniz. Kodun tamami referanslarda vardir.(bakiniz Ref. circle.f).

 

Uygulama 2: Yaklasik eğri üzerinde oklukirpi çizilmesi

Bu uygulamada amacimiz fareyle isaretledigimiz farkli ayrik noktalardan geçen yaklasik egri bulmak ve bu egri üzerine oklukirpi çizgiler çizmektir..

oklukirpileristenmeyen noktalarin belirlenmesinde, egrilik içinde sürekli olmayan ve düz olan kisimlarin belirlenmesinde kullanilmktadir. Bu yüzden Hesaplamali Geometride önemli bir konsepttir.

Kullanici tarafindan fare kullanarak rastgele olusturulan (1~4)sirasina göre noktalar kümesi dogrultusunda bir egri çizmek için en küçük kareler yöntemini kullanan bir kod geliştirdik.Bu kod, egri üzerinde oklukirpiler çizilmesi için (sikliklari kullanici tarafindan ayarlanabilir.)egrinin egrilik derecesinin göstergesinin belirlenmesini saglar.

Yazdigimiz Fortran kodunun detaylarini atlayarak grafiksel sonuçlari burda gösteriyoruz.(Kodu makalenin sonunda bulabilirsiniz).

Önce fare yardimiyla ekrana farkli noktalar giriyoruz, ve Fortran kodu bu noktalarin koordinatlarini alir,bir diziye yerlestirir.Daha sonra kullanicinin istedigi derecede, bu noktalardan geçen egriyi yaklasik olarak çizmemizi saglar.(1-4)




Sonra egri üzerine oklukirpi çizgileri çizildi.Oklukirpi çizgilerinin sayisi kullanici tarafindan seçilebilir,ve hiçbir arkaplanda veya noktalarda degisiklik yapmadan, ayni egri üzerinde yeni oklukirpiler çizilebilir.




Oklukirpilerin sikliklari asagida görüldügü gibi arttirilabilir, hem de program ayni verilerle yeni egri çizebilir.



 

Sonuç

Bu metinde interaktif bir çizim programi olan PGPLOT'un Linux altina nasil yerlestirilebilecegini ve uygulama alanlarinin ne kadar genis olabilecegini anlatmaya çalistik.Bu altfonksiyon listesi ile tamamen bagimsiz olarak kullanabilirsiniz ve eğer kodunuzun her çalistirilmasinda grafiksel çikti görmek istiyorsaniz size vakit kazandirir.  

Referanslar

 

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Baybora Baran ve Seçkin Gökaltun, FDL
LinuxFocus.org
Çeviri bilgisi:
en --> -- : Baybora Baran ve Seçkin Gökaltun <baybora(at)be.itu.edu.tr, gokaltun(at)itu.edu.tr>
en --> tr: Murat Pektaş <pektas(at)be.itu.edu.tr>
en --> tr: Çiğdem Yıldız <cigdemyildiz(at)be.itu.edu.tr>

2002-11-07, generated by lfparser version 2.31