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 (http://www.mevzuat.gov.tr/Metin.Aspx?MevzuatKod=1.5.2893&MevzuatIliski=0&sourceXmlSearch) 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 denemeler (http://ddili.org/forum/post/7587)de 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.
Alıntı:
>> 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;
> }
> }
> }
> ```
>
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]