2B Çarpışma Simülatörü Geliştirme Deneyimim
Merhaba! Fatih Soysal olarak, bu yazıda size geçtiğimiz günlerde geliştirdiğim 2 boyutlu bir çarpışma simülatörü projemden bahsedeceğim. Proje boyunca edindiğim deneyimlerimi, kullandığım teknikleri ve karşılaştığım zorlukları paylaşarak, bu konuda bilgi sahibi olmak isteyenlere yardımcı olmayı amaçlıyorum. Öncelikle, projenin amacı, farklı şekillerdeki nesnelerin birbirleriyle nasıl etkileşimde bulunduklarını simüle etmekti. Bu, çeşitli fiziksel olayların, örneğin, momentumun korunumu, sürtünme ve esnek olmayan çarpışmaların, görsel olarak canlandırılmasını sağladı.
Geliştirme aşamasında öncelikle bir fizik motoru oluşturdum. Bu motor, nesnelerin konumlarını, hızlarını ve ivmelerini takip ederek, zaman içindeki hareketlerini hesaplıyor. Ardından, çarpışma algılama (collision detection) algoritmaları geliştirdim. Bu algoritmalar, nesnelerin birbirleriyle çarpışıp çarpışmadığını tespit etmek için kullanıldı. Başlangıçta, basit bir kutu-kutusu çarpışma algılaması kullandım. Ancak, daha karmaşık şekilleri desteklemek için, daha sonra daire-daire ve daire-dikdörtgen çarpışmalarını da ekledim. Bu durum, özellikle farklı şekillerdeki nesnelerin simülasyonuna olanak sağladı.
Örneğin, dairesel bir nesnenin kare bir nesne ile çarpışmasını tespit etmek için, dairenin merkezi ile karenin kenarları arasındaki mesafeyi hesapladım. Mesafe, dairenin yarıçapından küçükse, çarpışma olduğu sonucuna vardım. Bununla birlikte, bu algoritmaların performansını optimize etmek oldukça önemliydi, çünkü çok sayıda nesne simüle ederken performans sorunlarıyla karşılaşma riskim vardı. Bu yüzden, özellikle nesne sayısı arttıkça hesaplama süresini kısaltmak için çeşitli optimizasyon teknikleri uyguladım. Örneğin, uzay bölme tekniklerini kullanarak, sadece birbirlerine yakın olan nesneler arasındaki çarpışmaları kontrol ettim.
Geliştirme süreci boyunca, özellikle çarpışma tepkileri (collision response) kısmında bazı zorluklarla karşılaştım. Nesnelerin çarpışmadan sonraki davranışlarını gerçekçi bir şekilde simüle etmek için, momentumun korunumu prensibini doğru bir şekilde uygulamak oldukça önemliydi. Bu durumu başarmak için birçok deneme ve yanılma yolu izledim. Sonuç olarak, momentum ve enerji transferinin doğru bir şekilde modellenmesiyle, gerçekçi çarpışma simülasyonları elde ettim. Bu aşamada, internetten bulduğum bazı makaleler ve kaynaklar bana oldukça yardımcı oldu. İşte bu kaynaklardan biri.
Simülasyonu görselleştirmek için HTML5 Canvas kullandım. Canvas, 2 boyutlu grafikleri çizmek için oldukça verimli bir yöntem sağlıyor. Ayrıca, JavaScript kullanarak etkileşimli bir arayüz geliştirdim. Bu arayüz, kullanıcının simülasyondaki nesneleri kontrol etmesini ve farklı parametreleri ayarlamasını sağlıyor. Örneğin, kullanıcı nesnelerin hızını, kütlelerini ve esneklik katsayılarını değiştirebiliyor.
Sonuç olarak, bu proje, hem yazılım geliştirme becerilerimi geliştirmeme hem de fiziksel simülasyonlar hakkında daha derin bir anlayış kazanmama olanak sağladı. Projenin kodunu ve daha fazla bilgiyi kişisel web sitemde bulabilirsiniz: fatihsoysal.com. Umarım bu makale, benzer projeler geliştirmek isteyenler için faydalı olmuştur.
