Selamun aleyküm.
Python kullanarak grafikler çizdirip, bunların programlarını [Rehber] Pardus Notlarım konusunda paylaşmıştım. C programlama dili kullanarak da grafikler çizdirmek istedim ve aşağıda anlattığım şekilde çizdirebildim.
İlk olarak C derleyicisi gcc ve grafik çizdirmek için gerekli freeglut3-dev (OpenGL) paketinin kurulması gerekiyor. Bunu aşağıdaki komutla yaptım (Synaptic Paket Yöneticisi ile de oluyor).
sudo apt-get install gcc freeglut3-dev
Kurulumdan sonra, herhangi bir metin düzenleyici ile (ben Geany programını tercih ettim) programlarımı yazdım ve home dizinine kaydettim. Sonra home dizinindeyken, fare işaretçisi (genelde ok şeklinde olur) boş bir yerdeyken farenin sağ tuşuna tıklayıp, Burada Terminal Aç’ı seçtim. Derleme için örneğin,
gcc sinus.c -o derlen -lglut -lGL -lm
komutunu girdim. Derlenen programı çalıştırmak için (örneğin)
./derlen
komutunu girdim ve grafiği ekranda gördüm.
Geany programını kullanarak C programlarını çalıştırmak için ise, İnşa Et>İnşa Komutlarını Seç yolu izlendiğinde açılan pencereye -lglut -lGL -lGLU -lm yazısı eklenip, Tamam düğmesine tıklanarak, ayarlama işlemi yapılmalı. Bir programın derlenmesi, inşa edilmesi ve çalıştırılması için ise, sırayla Derle, İnşa et ve Çalıştır düğmelerine tıklanmalıdır.
Bunlarla ilgili videolar çektim.
Programları da paylaşayım.
#include <GL/gl.h> // OpenGL
#include <GL/glu.h> // kütüphaneleri
#include <GL/glut.h> // dahil edildi.
#include <math.h> // Matematik fonksiyonları için (sin() vb.) bu kütüphane kullanılmakta.
void SinusCiz(void);
static int ortho = 1; // Görülen ortho kelimeleri grafiğin tamamının
// görüntülenmesi amacıyla kullanıldı.
static void Hepsinigoster(int w, int h) { // Buradaki hepsinigoster fonksiyonu grafiğin tamamının
glViewport(0, 0, w, h); // görüntülenmesi için kullanıldı.
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (ortho) {
glOrtho(-7.0, 7.0, -1.5, 1.5, -1.0, 1.0);}
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
if (argc > 1) {
ortho = 0;
}
glutInitWindowPosition(320, 160); // Grafik penceresinin ekranın belirli bir kısmında çıkması sağlandı.
glutInitWindowSize(640,480); // Grafik penceresinin boyutu ayarlandı.
glutInitDisplayMode(GLUT_RGBA | GLUT_ALPHA); // Görüntü modu belirlendi.
glutCreateWindow(“Sinus”); // Açılacak grafik penceresine isim verildi.
glClearColor (1.0, 1.0, 1.0, 1.0); // Arka plan rengi beyaz yapıldı.
glutDisplayFunc(SinusCiz); // SinusCiz fonksiyonu çağrıldı.
glutReshapeFunc(Hepsinigoster); // Hepsinigoster fonksiyonu çağrıldı.
glutMainLoop();
return(0);
}
void SinusCiz (void) // Buradaki SinusCiz fonksiyonu sinüs grafiğini çizmek için kullanıldı.
{
double t, genlik; // t değişkeni double olarak tanıtıldı.
glClear(GL_COLOR_BUFFER_BIT); // Tampon temizlendi ve renkli çizim için ayarlandı.
glPointSize(3.0); // Nokta boyutu (çapı) belirlendi.
glBegin(GL_POINTS); // Noktalarla yapılacak çizim işlemi başlatıldı.
for(t = -6.28; t <= 6.28; t+=0.01){ // İki periyotluk sinüs için döngü başlatıldı.
glColor3f(0.0, 0.0, 0.0); // Noktaların rengi siyah yapıldı.
genlik = sin(t); // Zamanın sinüs değeri genlik değişkenine atandı.
glVertex2f(t,genlik); // Noktanın grafik ekrandaki koordinatları atandı.
} // Döngü bitti.
glEnd(); // Çizim işlemi bitti.
glFlush(); // Çizim ekranda gösterildi.
}
#include <GL/gl.h> // OpenGL
#include <GL/glu.h> // kütüphaneleri
#include <GL/glut.h> // dahil edildi.
#include <math.h> // Matematik fonksiyonları için (exp() vb.) bu kütüphane dahil edildi.
#include <stdio.h> // Değişkenleri okutmak (scanf) ve yazdırmak (printf) için dahil edildi.
void KonsansatorunDolmasiniCiz(void);
static int ortho = 1; // Görülen ortho kelimeleri grafiğin tamamının
// görüntülenmesi amacıyla kullanıldı.
static void Hepsinigoster(int w, int h) { // Buradaki hepsinigoster fonksiyonu grafiğin tamamının
glViewport(0, 0, w, h); // görüntülenmesi için kullanıldı.
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (ortho) { // Zaman sabitinin beş katı dikkate alınarak,
glOrtho(-5, 5, -1.5, 1.5, -1.0, 1.0);} // glOrtho() fonksiyonunun en soldaki iki değeri belirlendi.
glMatrixMode(GL_MODELVIEW);
}
void KonsansatorunDolmasiniCiz (void) // Buradaki KonsansatorunDolmasiniCiz fonksiyonu kondasatörün
{ // dolma grafiğinin çizdirilmesi amacıyla kullanıldı.
double t, genlik; // t değişkeni double olarak tanıtıldı.
double Zamansabiti, aradeger; // Zamansabiti değişkeni double olarak tanıtıldı.
printf (“Zaman Sabitini Giriniz:”); // Ekrana “Zaman Sabitini Giriniz” yazısı yazdırıldı.
scanf (“%lf”,&Zamansabiti); // Klavyeden girilecek değerin Zamansabiti değişkenine atanması sağlandı.
printf (" \n"); // Bir satır boşluk bırakılıp, bir alt satıra geçildi.
glClear(GL_COLOR_BUFFER_BIT); // Tampon temizlendi ve renkli çizim için ayarlandı.
glPointSize(3.0); // Nokta boyutu (çapı) belirlendi.
glBegin(GL_POINTS); // Noktalarla yapılacak çizim işlemi başlatıldı.
for(t = 0; t <= 5.0*Zamansabiti; t+=0.01){ // Artış miktarı 0,01 olan, beş Zaman sabiti süreli bir döngü başlatıldı.
glColor3f(0.0, 1.0, 1.0); // Noktaların rengi camgöbeği yapıldı.
aradeger=t/Zamansabiti; // t değişkeni, Zamansabitine bölünüp, aradeger değişkenine atandı.
genlik = 1-exp(-aradeger); // Zamanın üstel değeri genlik değişkenine atandı.
glVertex2f(t,genlik); // Noktanın grafik penceresindeki koordinatları atandı.
} // Döngü bitti.
glEnd(); // Çizim işlemi bitti.
glFlush(); // Çizim grafik penceresinde gösterildi.
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
if (argc > 1) {
ortho = 0;
}
glutInitWindowPosition(320, 160); // Grafik penceresinin ekranın belirli bir kısmında çıkması sağlandı.
glutInitWindowSize(640,480); // Grafik penceresinin boyutu ayarlandı.
glutInitDisplayMode(GLUT_RGBA | GLUT_ALPHA); // Görüntü modu ayarlandı.
glutCreateWindow(“Kondansatorun Dolmasi”); // Açılacak grafik penceresine isim verildi.
glClearColor (1.0, 1.0, 1.0, 1.0); // Arka plan rengi beyaz yapıldı.
glutDisplayFunc(KonsansatorunDolmasiniCiz); // KonsansatorunDolmasiniCiz fonksiyonu çağrıldı.
glutReshapeFunc(Hepsinigoster); // Hepsinigoster fonksiyonu çağrıldı.
glutMainLoop();
return(0);
}
Programları dosya olarak da paylaşayım. İçerikleri kopyalayıp, Geany programında kaydedip, uzantılarını .c yaparsanız, çalışır.
sinus.odt (17.1 KB)
kondansator.odt (18.6 KB)
Ayrıca, hazır .c uzantılı dosyaları aşağıdaki adrese yükledim. İndirdikten sonra, Ev>İndirilenler içerisinde arşiv dosyasına sağ tıklayıp, "Buraya ayıkla"yı seçerseniz, dosyalara ulaşmış olursunuz.
Hayırlı çalışmalar dilerim.