“Hiç uğraşamam…”

Python:Çember Çizimi

Bugün arkadaşım Alpcan ile sohbet ederken konu nerelere geldiyse böyle bir uygulama yapmak istedim. Hazır python’a yeni yeni başlamışken iyi olacağını düşündüm. Uygulama sağlıklı bir sonuç vermiyor henüz, zaten yeterince iyi bir yapıya da sahip değil. Eee python’u yeni öğrenmeye başlayan bir insandan bekleyeceğiniz sonuç bu kadar olmalı diye düşünüyorum :)

Uygulamanın kodlarını incelerken fark edeceksiniz ki mantık çok basit. Elimizde bir yarıçap var ve bu yarıçapı 0 ile 90 derece arasındaki cosinüs ve sinüs değerleriyle çarparak izdüşümlerini elde ediyoruz. Böylece noktalayacağımız bir adet koordinat bilgisine sahip oluyoruz. Çemberin 4 de 1′ini elde ederken var olan koordinat bilgilerinin x ve y eksenlerine göre simetriğini alıyoruz. Bu durumda oluşacak çemberin 4 de 1′i trigonometrik fonksiyonlar ile hesaplanırken, geri kalan 4 de 3′ü toplama-çıkarma yöntemi ile hesaplanıyor. Elbette çember çizebilmek için çok daha iyi bir yöntem vardır (belki modül içerisinde bile yer alıyordur) ancak ben işin içerisine biraz matematik ve geometri katmak istedim benim geometri bilgim bu kadarına elverdi. Fazla uzatmadan, buyrun uygulamanın kodları…

  1. #!/usr/bin/python
  2. #-*- coding:utf-8 -*-
  3. import Image, ImageDraw, math, os
  4.  
  5. def resimolustur():
  6.   global i, c
  7.   i = Image.new("RGB",(300,300),(255,255,255))
  8.   c = ImageDraw.Draw(i)
  9.  
  10. def noktala(tup):
  11.   for i in tup:
  12.     c.point(tup,(0,0,0))
  13.  
  14. def resmikaydet():
  15.   i.save(os.getenv("HOME")+"/cember.jpg")
  16.  
  17. def cember(r):
  18.   xy = 150
  19.   aci = 0
  20.   resimolustur()
  21.   while aci <= 90:
  22.      x = int(round(r * math.cos(math.radians(aci))))
  23.      y = int(round(r * math.sin(math.radians(aci))))
  24.      tup = (xy+x,xy+y),(xy+x,xy-y),(xy-x,xy+y),(xy-x,xy-y)
  25.      noktala(tup)
  26.      aci += 1
  27.   resmikaydet()
  28.  
  29. if __name__ == "__main__":
  30.   cember(100) # 100px yarıcap
  31.  

Uygulama, 300 x 300 ebatlarında /home/[KULLANICI] dizini altinda, cember.jpg isim ve uzantısına sahip şöyle bir sonuç verecek.

Tags: , , , , ,
Posted in Python · Temmuz 7th, 2009 · Comments (0)

No comments yet

Leave a Reply

Bağlantılar

Etiketler

çember özel yöntem isimleri apache2screen apache2screen.deb bele kuvvet blog brsyuksel brute-force classic classes classmethod descriptors getanurse ic.lnx icontacts ileri c programlama image imagedraw kaba kuvvet kelime tahmin libnotify math math.cos math.sin matryoshka memory leak mesafe mysqli new-style classes oauth php5 property pynotify Python singleton special method names staticmethod steganografi steganography super temizlik twittell TwittellOAuth wchar yeni stil sınıflar __mro__

Meta