Okul
Java ile Türk Bayrağı
7th Mar 2010 | Sınıfı: Okul 3

Bu dönem içeriğinin yarısında Java’da çizim, threading vs. konuları göreceğimiz Yazılım Mühendisliği dersinin ilk projesinde Java ile Türk Bayrağı çizdik. Bunun için Java’nın Graphics2D kütüphanelerini kullandım. Projeye başlamadan önce acaba bu işi kod ile yapan var mıdır diye düşünüp arasam da pek bir sonuca ulaşamadım. Ben de oturdum Türk Bayrağı’nın ölçünlerini analiz ederek Analitik Geometri bilgileriyle her bir öğenin (ay, yıldız) koordinatlarını hesapladım.

Bayrağın koordinatları G ile ifade edilen genişlik miktarına orantılı olarak hesaplanıyor. Ancak dikkat etmek gerekiyor ki bu genişlik dikey eksende belirlendiği için bazı durumlarda ekran onu yükseklik olarak kabul edebiliyor. Hilal şeklinde ay yapabilmek için iç içe geçmiş iki daire yapmak gerekti.

Beyaz Büyük dairenin merkezi (G/2, G/2), yarı çapı G/4
Kırmızı Küçük dairenin merkezi (0.5625*G, G/2), yarı çapı G/5

Sıra geldi yıldız yapmaya. Burası oldukça zorladı. Verilen özelliklere bakılırsa bir daire çizip bunu 72 derecelik beş parçaya ayırmak gerekiyordu. Sonra her bir noktayı kendisine uzak olan 2 diğer nokta ile birleştirip şekli doldurunca yıldız oluşuyor. Bunun için polar koordinat sisteminden kartezyen koordinat sistemine dönüşüm yapmam gerekti. Açıların sinüs ve kosinüs hesaplarını yaparak yıldızın noktalarının koordinatlarını hesapladım.

Eğer yıldızı çevreleyen dikdörtgen (0,0) noktasında başlamış olsaydı (yani sol üst köşeden başlayacak şekilde sadece yıldız çiziyor olsaydık), yıldızın sivri uçlarının koordinatları şöyle olacaktı (yarıçap r = G/8)

(0 , r); (1.80901*r, 0.4123*r); (0.691*r, 1.951*r); (0.691*r, 0.049*r); (1.80901*r, 1.5877*r); (0, r)

İlk ve son koordinat aynı, çizim yaparken bu sırada yaparsanız ve doldur derseniz elinize dolu bir yıldız çıkıyor.

Ancak bu verdiğim yerel koordinatlara bir de yıldızı çevreleyen dikdörtgenin konumunu eklemek gerekiyordu. Böylelikle yıldızı hilalin hemen sağına getirebilirdim. Bunun için yukarıda hesapladığım her bir koordinatın x bileşenine (0.35 + 1/3.0)*G, y bileşenine 3*G/8 eklemem gerekti. Bunları ekledikten sonra elimde gerçek ölçünlere uygun bir Türk bayrağı vardı. Ancak bayrağın en solunda bulunan beyaz kısmı dahil etmedim. Öyle bir şey olsa yukarıdaki tüm koordinatlara belli bir x değeri eklememiz gerekirdi.

Yazdığım kodları buradan indirebilirsiniz. Bir de şunu fark ettim, hemen hiçkimse bunca zamandır yıldızın eğik durduğunu fark etmemiş. :) Genişliği ortadan ikiye bölen çizgiyi hayal edin. O çizgi, yıldızın en soldaki sol açısının açıortayı durumunda.

3 Comments
  1. Halil İbrahim ÇAKIR
    19.23 on Mart 19th, 2010

    Ellerine sağlık hocam çok güzel olmuş. Ben de aynısını C# ile yapmayı düşünüyorum. İyi çalışmalar

  2. Abdullah Balta
    19.49 on Temmuz 25th, 2010

    Teşekkürler hocam çok işime yaradı.

  3. Ahmet Emre Aladağ
    20.01 on Temmuz 25th, 2010

    Yoksa hoca aynı ödevi mi verdi :O :D

Leave a Reply