|
|
Bu makalenin farklı dillerde bulunduğu adresler: English Castellano Deutsch Francais Turkce |
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:
|
Ö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.
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.
Asagida PGPlot in yapabileceklerine dair bazi PGPlot uygulamalari sunuyoruz.
/usr/local/src/pgplot
(kaynak dizin)
/usr/local/pgplot
(hedef dizin)
cd pub/pgplot
binary
hash
get pgplot5.2.tar.gz
tar
dosyasinin içinde de bulunmaktadir.
ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz
.
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
-
/usr/local/src/pgplot
yaratir.
mkdir /usr/local/pgplot
Kaynak dizin altinda PGPlot kütüphanesi yaratmaya çalismayin.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.)
makemake
adi 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.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_ccEger sistemin listelenmislerden biri ise asagidaki gibi ilerler: bir hedef dizin olusturun, örnegin,
cd /usr/local/pgplotdagitim dizininden
makemake
alfabesini uygulayin.Örnegin;
/usr/local/src/pgplot/makemake /usr/local/src/pgplot linuxmakemake' 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. 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.
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
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.conf
ismi ile kendi konfigürasyon dosyanizi
yaratin.En iyisi pgplot/sys_*/*.conf
dan 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.
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)*
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)*
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
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, buLD_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).
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:
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 serverBu dosyalari pgplot dizininden kodunuzun bulundugu dizine kopyalayin.
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).
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.
|
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:
|
2002-11-07, generated by lfparser version 2.31