Forum: Duyurular RSS
Türk Bayrağı Taslağı
Ölçü, kod...
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Türk Bayrağı Taslağı
Merhaba,

Herkesin kullanabileceği, bayrağımızın oranları çıkartmak istedim. Türk olduğumuza göre, belki de her programcının bilmesi gereken şeyler. Belki gereksiz ve şuradaki kanunu okuyan çoğumuz yapabiliriz. Belki de başka yerlerde kodlanmış ve/veya çok güzel yöney çizitlerle (vector graphics) çizilmiştir...:)

Neyse ve neyse ki bayrağımız şanlı, güzel ve de kodlaması çok zor değil. Sanırım en kolayı da Japon Bayrağı olmalı; ortada bir yuvarlak! Pratik insanları seviyorum ve aşağıdaki kodların gerektiğinde işlerinizi kolaylaştıracağını düşünüyorum:
import sdlmini, std.stdio;
 
void main() {
/********* Küsüratı olmayan en iyi oran H = 600 (x 900) / 0.54 MPixel *********/
  enum H = 600// Kanunda, bayrağın genişliği(en) ama burada width yerine h,
  enum W = H*1.5;// kesin bir dille en/boy oranı kanunda şöyle: L = (1+1/2) * G 
  enum a = H/4.0;
  enum b = H/5.0;
  enum c = W/5.0;
  enum ç = W/4.0;
  enum d = H/3.0;
  enum e = H/8.0;
 
  writeln("TÜRK BAYRAĞI ÖLÇÜLERİ");
  writeln("=====================");
  W.writeln("\t(Pencere Genişliği = yükseklik * 1.5)");
  H.writeln("\t(Pencere Yüksekliği)");
  a.writeln("\t(", H, "/4)");
  b.writeln("\t(", H, "/5)");
  c.writeln("\t(", W, "/5)");
  ç.writeln("\t(", W, "/4)");
  d.writeln("\t(", H, "/3)");
  e.writeln("\t(", H, "/8)");
 
  alias W BOY; /* ters */
  alias H EN; /* düzen */
  
  int A = cast(int)EN/4;
  int B = cast(int)EN/5;
  int C = cast(int)BOY/5;
  int Ç = cast(int)BOY/4;
  int D = cast(int)EN/3;
  int E = cast(int)EN/8;
 
  with( new draw(cast(int)W, cast(int)H, "Türk Bayrağı Taslağı", clr.black ) ){
    do {
    
      yuvarlak (   A, A, A );          // dolunay
      yuvarlak ( Ç-1, C, B, clr.red)// hilal kesmesi
      yuvarlak ( Ç+D, Ç, E );          // yıldız zemini
 
      /*toogle-on/off       Pencere simsiyah ise hesaplama doğru...:)
     
      yuvarlak (h/4  , h/4, h/4, clr.black);
      yuvarlak (w/4-1, w/5, h/5, clr.black);
      yuvarlak (w/4+h/3, w/4, h/8, clr.black); //*/
      
    } while( keyEvent(1) );
  }
}
Peki bu bayrakta yıldız nerede diyenler olabilir...:)

Cevabı basit, şuradaki denemelerde 5 tane kırmızı beşgen kullanarak, ortadaki beyazlığı, dış kenarlardan kesiyorum ama en/boy'a göre oranlayamıyorum. Elbette başka yöntemler var ama henüz bunu sadece 300x200 için yapabildim. En güzeli, başka bir işlev ile 3. yuvarlağın koordinatlarına yıldızı çizmek olabilir. Bunu hafızada (flip edilmemiş surface'de) yapabilirsiniz. Zaten önemli olan ölçüler bunlardı. Ha, bir de eğer farklı bir dilde kodlanacaksa ve/veya elinizde sdlmini.d modülü yoksa aşağıdaki yuvarlak() işlevini kullanabilirsiniz/uyarlayabilirsiniz.

  void yuvarlak(int x, int y, int r, int c = int.max) {
    int len, ofs;
    for(int i = 0; i < 2 * r; i++) {
      len = cast(int)sqrt(cast(float)(r ^^ 2 - (r - i) ^^ 2));
      ofs = (y + i) * (scr.pitch / 4) + r - len + x;
      len*=2;
      for(int j = 0; j < len; j++) {
        (cast(uint*) scr.pixels)[ofs + j] = c;
      }
    }
  }
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Duyurular RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 00:28:16 (UTC -08:00)