Skip to main content

Di’li gecmiş zamanda seni sevmek…

Di’li geçmiş zamanda Seni sevmek ,ismine aldanıp izlemeye başladığım filmin gerilim filmi çıkması gibi bir şeydi. Ve filmin en ürkütücü anında, elektriklerin kesilmesi,üstelik koca evde; tek başına olmak gibi bir şey…

Sağa sola çarparak mum aramak,korkmak alabildiğine ve bulmak en sonunda mumu eline aldığında; onu yakacak bir kıvılcımın olmadığını fark etmek gibi bir şeydi….
Kötü niyetli gecenin; yıldızlardan bile yoksun olması gibi bir şey kulağına gelen acayip seslerin şakaları gibi,hücrelerini saran soğuk bir duyguya, ağlayarak teslim olmak gibi bir şeydi…

Dakikaların inatla ağırlaşması, saatlere dönüşmesi gibi koltukta kendine sarılıp çaresiz ve korkak bir bekleyişi üzerine örtmek gibi bir şeydi…
Ansızın kapının vurulması o anda ama kapıyı açacak cesareti karanlığa gömmek gibi bir şeydi…

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Nesne Carpışma Algoritmaları

Bu dönem aldığım Nesneye Yönelik Programlama dersinde verilen ödevler sayesinde yeni şeyler öğrenmeye devam ediyorum. Geçtğimiz haftalarda yaptığımız uygulamada Java Applet içersinde bir adet topu dolastırmıştık ve bu top appletin bir kenarına çartığında yön değiştirmişti. Bahsi geçen uygulamayı burada bulabilirsiniz.

Bu hafta verilen ödevde ise aynı yapıyı birden fazla top için yapmamız istendi. Bu uygulamanın kodlarını daha sonra paylasağım . Çünkü içersinde Threads yapısını kullandığımız için  onu ayrı bir paylasım konusu olarak düşündüm. Bu yazıyı ödevin bonus kısmı olan ” Topların Çarpışma” durumunu incelemek için yazma gereği duydum.

Oyun programlamanın temel taşlarından birisi şüphesiz ki  iki nesnenin çarpışma durumun tespitidir.  Peki bu olayın tespiti nasıl münkün oluyor ?  Şimdi bunları incelemeye çalişalım. Yapacağımız incelemeler 2D yani 2 boyutlu cisimler  için çözüm üretecektir.  Oyun  programlama dolayısıyla bu tip işler özel ilgi gerektiren yapılardır. Biz ise hali hazırda kullanılan algoritmaları kullanarak çözümler üretmeyi deniyoruz.    Bu tip uygulamaların iyi düzeyde Fizik ve Matematik bilgisi gerektirdiği akıllardan çıkarılmamalıdır. Ayrıca günümüzde orta büyüklükte bir oyun yazıkırken  bir Fizik Motoru kullanılır.  Bu tip motorlar sayesinde bir kaç ufak adımla  çarpışmalar çok rahat bir biçimde tespit edilebilir. Fakat biz kendimizin ufak çaplı bir oyun yazmaya calıştığını ve nesnelerin çarpışma durumun tespit edilmesi gerektiğini  varsayalım. Nasıl bir yaklaşımla bunları tespit edebiliriz.

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

C Programlama : Bisection Metodu ile Fonksiyonların Köklerini Bulmak

Verilen matematiksel bir fonksiyonun köklerini bulmak için bir çok algoritma kullanılabilir. Bunlardan biride Bisection yöntemidir.  Daha gelişmiş yöntemler olmasına rağmen ( Newton İterasyon Yöntemi) bu yöndemde sık sık kullanılır. Bu yöntemi Türkçemize ikiye bölme yöntemi olarak çevirebiliriz. Peki bu algoritma nasıl çalişir ?

Aradığımız değerlerin belli bir aralıkta olduğunu düşünelim. Bu değeri bulmak için önce belirlediğimiz aralığım tam ortasını deneriz,  eğer aradığımız değer tam ortada değilse ya  sağımızda yada solumuzda kalmıştır gerçeğinden hareket ediyoruz.  Bu durumda elimizde yeni bir aralık  oluyor ve  Rekürsif bir algoritma  ( Özyineleme) kullanarak  bu aralıkları tek tek deneyerek sonuca ulaşabiliyoruz.

Çözüme ulaşmak için kullandığımız C Kodları aşağıdaki gibidir.
Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Java Applet Uygulaması : Analog Saat

Program  Java Applet sınıfını kullanarak ekrana Analog bir saat çizer. Ve sistem saatini gösterir.    Yabancı bir kaynakta denk gelmiştin bu örneğe ve hoşuma gitti. Burada paylaşmak istedim. Program bir çok sınıfı kendisine import ediyor. Ama bizim için bunlardan önemli olanı import yildiz; olarak eklediğimiz sınıf. Çünkü bu sınıfta biz tarafında kodlandı. Onunda kodlarını aşağıda bulabilirsiniz.
Programın çıktısı şu şekilde olacaktır.

import java.applet.Applet;
import java.util.*;
import java.awt.*;
import yildiz;
import polar;
import java.awt.event.*;
 
class yildizCiz2Thread extends Thread
{
Applet a;
   public yildizCiz2Thread(Applet ai)
   {
   a=ai;
   }
 
   public void run()
   {
   while(true)
   {
    a.repaint();
    try {Thread.sleep(1000);}
    catch(InterruptedException e)
    {System.err.println(e.toString());}
   }
   }
} //yildizciz2Thread sinifinin sonu
 
public class analogSaat extends Applet
{
  yildizCiz2Thread y;
  double aci1,aci2,aci3;
  Date c;
  polar p;
 
  public void init()
  {
    c=new Date();
    // Lincoln -USA standart (Greenwitch zamanina göre 6 saat geride)
    // String[] ids = TimeZone.getAvailableIDs(-6 * 60 * 60 * 1000);
    // Türkiye saati ; (Greenwitch zamanina göre 2 saat ileride)
    String[] ids = TimeZone.getAvailableIDs(2 * 60 * 60 * 1000);
    if (ids.length == 0)
       System.exit(0);
    // Lincoln -USA standart (Greenwitch zamanina göre 6 saat geride)
    // SimpleTimeZone pdt = new SimpleTimeZone(-6 * 60 * 60 * 1000, ids[0]);
    // String[] ids = TimeZone.getAvailableIDs(-6 * 60 * 60 * 1000);
    // Türkiye saati ; (Greenwitch zamanina göre 2 saat ileride)
    String[] ids = TimeZone.getAvailableIDs(2 * 60 * 60 * 1000);
    GregorianCalendar takvim=new GregorianCalendar(pdt);
    takvim.setTime(c);
    p=new polar();
    setBackground(renk.beyaz);
    aci1=-takvim.get(Calendar.SECOND)/60.0*Math.PI*2;
    aci2=-takvim.get(Calendar.MINUTE)/60.0*Math.PI*2;
    aci3=-((takvim.get(Calendar.HOUR))%12)/12.0*Math.PI*2+aci2/12.0;
    y=new yildizCiz2Thread(this);
    y.start();
  }
 
  public void paint(Graphics g)
  {
  try{
     g.setColor(renk.camgobegi);
     yildiz.fillDaire(g,200,200,170);
     g.setColor(renk.mavi);
     yildiz.fillAkrep(g,200,200,16,160,aci2,0);
     g.setColor(renk.yesil);
     yildiz.fillAkrep(g,200,200,8,110,aci3,0);
     g.setColor(renk.lacivert);
     yildiz.fillAkrep(g,200,200,10,60,aci1,0);
     g.setColor(renk.siyah);
     yildiz.drawDaire(g,200,200,165);
     yildiz.drawDaire(g,200,200,170);
     yildiz.drawAkrep(g,200,200,16,160,aci2,0);
     yildiz.drawAkrep(g,200,200,8,110,aci3,0);
     yildiz.drawYildiz1(g,200,200,10,60,aci1);
     aci1-=Math.PI/30.0;
     aci2-=Math.PI/1800.0;
     aci3-=Math.PI/21600.0;
     for(int i=0;i

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Ayrık Matematik Ders Notları

Bilgisayar Mühendisliği Bölümü programlarında Ayrık Matematik yada Discrete Mathematic yada Vb. adlarla verilen dersin notlarıdır. Bir çok farklı üniversitenin  notunu barındırır.

İstanbul Teknik Üniversitesi  İstanbul Üniversitesi,Gebze Yüksek Teknoloji Ensütüsü, Anadolu Üniversitesi,Sakarya Üniversitesi,Maltepe Üniversitesi  notlarını barındırır.

Ders Genel Olarak Aşağıdaki Konu Başlıklarını Kapsar :

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Java Programlama : Şirketlerin Ortalama Kar Durumunu Hesaplayan Program

Yazının başlığını ne koysam diye uzun uzun düşündüm ama pekte başarılı bir başlık bulamadım .Nasıl olsa ihtiyacı olan birinin Google buraya gonderir diye düşünüyorum . Bir akradaşımız yardım istemiş attığı maille ve yapmak istediği programda hatalar olduğunu belirtmiş. Benimde göz atmamı istemişti. İlk 2 gün fırsatım olmasa da fırsat bulduğum ilk anda programa baktım ve yeniden yazdım.

Öncelikle şunu kesinlikle berlitmek isterim ki eğer arkadaşımız bu şekilde istemeseydi programın kodlaması bu şekilde olmazdı. Her yapılan iş için ayrı bir metod yazıp programı tamamen nesne yönelimli olarak yazardım . Ama arkadaşımız bu şekilde bir istekte bulununca klasik programlama uygulanarak ve Java dili kullanarak sonuca gittik.

Program kullanıcıdan kaç adet şirket için işlem yapacağını alır. Girilen şirket sayısına göre kullanıcıdan yılın her ayı için ( 12 Ay ) bir ortalama kar girmesini ister.

Program Çıktı Olarak Şu sonucları verir

  • Her Şirketin Ortalama Kar Durumunu
  • Her Şirketin En Fazla Kar Ettiği Ayı
  • Her Şirketin En Az Kar Ettiği Ayı

Yukarıdaki verileri bulup ekrana yazan java programın kodları işe aşağıdaki gibidir.

Devamını Oku

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Java Applet Uygulaması : Duvara Çarpıp Geri Dönen Top

İstanbul Üniversitesi Bilgisayar Mühendisliği bölümünde Java programlama dersinde haftalık olarak verilen ödevleri paylaşmaya devam ediyor. Bu haftaki uygulamamız Java Appletler’i ile ilgili.  Bir  Java Applet içersinde ki  top   kenarlara çarpacak ve çarptığı yer doğrultusunda ters istikamette yoluna devam edecek.

Duvara her captığında program bir İstisna fırlatacak.   Ve hangi koordinatlarda  duvara çarptığı  ekrana mesaj edilecek. Yapılanları yorum satırı olarak belirtmeye çalıştık. Umarım yardımcı olur.

 

 

 

 
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package carpandaire;
 
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.logging.Level;
import java.util.logging.Logger;
 
 
class carpmahatasi extends Exception
{
}
public class Carpandaire extends Applet {
     public int sayac=0;
     public int yony=1;
     public int yonx=1;
     boolean sinyalx=false;
     boolean sinyaly=false;
     //alttaki değişkenleri istersek kullanıcı girişlide yapabilitiz.
     public int xdegeri=100;
     public int ydegeri=150;
     public int kareningenisligi=300;
     public int kareninyuksekligi=500;
     public int kureninboyu=50;
     //Bu dikdörtgen değerlerini özellikle seçtim ki tam köşeye çarptığında bile hata vermeyip.
     //Tek bir carpmahatasi istisnası göndererek işlemini tamamlamasıdır.
    @Override
public void init()
{
    resize(900,900); // Ekran Genişliği Ayarlanıyor.
    setSize(800, 800);
}
    @Override
    public void paint(Graphics ciz)
    {
        for(int i=0;i<100;i++)
        {
            //Çabuk gösterilsin diye 50 ile çarptık boyu da 50 ile ayarlı. Lakin
            //bu dikdörtgenin büyüklüğünü oranlı yapmamıza neden oluyor zira tutmazsa taşıyor.
            //Taşıyor dediğimiz sonuçta x ve y koordinatlarını 1'er değil 50 şer arttırmamızdan.
            //Eğer alttaki kodları xdegeri ve ydeğeri satırlarının yerine koyarsak bu sorun
            //ortadan kalkar.
            //xdegeri+=yonx;
            //ydegeri+=yony;
            xdegeri+=yonx*50;
            ydegeri+=yony*50;
            try 
            {
                cizim(ciz,xdegeri,ydegeri,kureninboyu); 
            } 
            catch (carpmahatasi ex)  // İstisna oluşusup olusmadıgını kontrol et. ! 
            {
                sayac++;
                System.out.println(sayac+".cı kez çarptı");
            }
            try {
                Thread.sleep(300);
            } catch (InterruptedException ex) {
                Logger.getLogger(Carpandaire.class.getName()).log(Level.SEVERE, null, ex);
            }
 
        }
    }
    void cizim(Graphics ciz,int x,int y,int kureninboyu) throws carpmahatasi
        {   
            ciz.setColor(Color.WHITE);  // Ekranı Beyaz Yap
            ciz.fillRect(100, 100, kareningenisligi, kareninyuksekligi); // Ekrana Bir Dikdörtgencİc
            ciz.setColor(Color.BLACK); // Yazı Tengini Siyah Yap
            ciz.drawRect(100, 100, kareningenisligi, kareninyuksekligi); 
            ciz.setColor(Color.blue); //  Yazi Rengini Mavi Yap
            ciz.fillOval(x, y, kureninboyu, kureninboyu); // // Cizilen Dikdortgen icine bir top ciz 
            if((xdegeri+kureninboyu) >= (kareningenisligi+100) || xdegeri == 100) 
			// X koordinatında  duvaa carpip carpılmadıgını kontrol ediyoruz
            {
                yonx *= -1; // Eğer taşma varsa x koordinatını -1 le carparak tam zıtt yonde  hareket ettier
                sinyalx=true; 
            }
            if((ydegeri+kureninboyu)>= (kareninyuksekligi+100) || ydegeri == 100)
			// Y koordinatında  duvaa carpip carpılmadıgını kontrol ediyoruz
            {
                yony *= -1; // Eğer taşma varsa x koordinatını -1 le carparak tam zıtt yonde  hareket ettie.
                sinyaly=true; 
            }
            if(sinyalx||sinyaly)
            {
            if(sinyalx)sinyalx=false;
            if(sinyaly)sinyaly=false;                
            throw new carpmahatasi();
            }
 
         }
}

Başka bir uygulama da görüşmek dileğiyle =)

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS