Python’da Pyglet ile 2D Üçgen Döndürme

En iyi öğrenme metodunun uygulayarak, deneyerek, yanılarak olduğunu bayağı önceleri kavradım. Okul derslerinde bu yöntemi uygulamak ne yazık ki kimi zaman mümkün olmasa da, elimden geldiğince, konular dersler ilgimi çektikçe yapmaya çalışıyorum.

Bu nedenle Bilgisayar Grafik dersinde gördüğüm verilen bir noktaya göre üçgeni belirli bir açıyla döndürme işlemini python ve pyglet kutuphanesi ile gerçekleştirmek istedim. Kodda işin bitmesine odaklandım. Aynı işi çok daha iyi yaklaşımlarla yapmak elbette mümkündür.

Matematiksel Hesaplama:
Üçgenimizin köşelerinin A1(x1,y1) A2(x2,y2) A3(x3,y3) olduğunu, etrafında döndürülmesi istenen noktanın R(m,n) olduğunu ve verilen açının da θ olduğunu kabul edelim.
Öncelikle üçgenin her köşesini [x  y  1] formatına çevirip 3×3’lük matrisi elde edelim:

Daha sonra bu noktaları verilen referans noktaya göre orjine öteleyecek otele1 matrisini oluşturalım:

Orjin etrafında üçgenimizi verilen açı kadar saat yönünün tersine döndürecek dondur matrisini oluşturalım:

En son olarak da döndürülen üçgeni verilen referans noktaya göre eski yerine taşıyacak otele2 matrisini oluşturalım:

Oluşturduğumuz bu transform matrislerini sırasıyla üçgen matrisimize uygularsak, üçgenimizin yeni koordinatlarını elde ederiz:

Python’da Gerçekleştirme:
Program 4 aşamadan oluşuyor. Üçgen çizme, referans nokta alma, açı değerini alma ve yeni üçgeni ekrana çizdirme olarak. Aşamalar sequential yani birbiri ardına devam edecek şekilde ilerliyor.

Kullanıcı girdisi on_mouse_press ile ekrana tıklanılan koordinatlardan, açı değeri de konsoldan raw_input ile alınıyor.
Yeni oluşturulacak üçgen ucgen_hesapla fonksiyonu ile bulunuyor.
Sonsuz döngüde çalışan on_draw fonksiyonu ile ekrana o an çizilmesi gereken üçgen, nokta veya yeni üçgenin çizimi yapılıyor.

Kodun tamamına github sayfasından ulaşabilirsiniz: 2d_ucgen_dondurme.py