Skip to content

Yazılım

Görev 1 : Proje Başı Canavarı#

Görev 1.1 : Kronovizör - S1:B9 Hesaplama#

TRT Belgesel yapımı olan bu içerik aslında çeşitli günümüzdeki teknolojinin temelini oluşturan optik gibi ana bilim dallarını ve konu başlıklarını içeren bilim tarihi açısından özetleyen bir yapımdır. Programın konu akışı ve verdiği konseptler bizlerin de çok ilgisini çekmiş olup günümüz ile geçmiş arasında bir mana köprüsü kurmamıza yarayacak soruları da bize sordurtabilmektedir. Bölüm 1: Proje Başı Canavarı’nın ilk görevine hoşgeldiniz; zihin dünyamızı canlandırmak!


Görev 1.2 : Labirentten Kaçış#

Bu bölümde sizlerden labirentte mahsur kalmış zavallı robotumuz için bir algoritma tasarlamanızı istiyoruz. Bu algoritmanın temel amacı, matrix şeklinde belirtilen bir labirentten kaçışın mümkün olup olmadığını tespit etmek. Bunu bir oyun gibi düşünebilirsiniz. Bu oyunda labirent, \(m \times n\) boyutlarında bir matrisle temsil edilir ve oyun kuralları şu şekildedir:

  • Hareket, labirent matrisinin sol üst köşesinden başlar ve sağ alt köşesinde sona erer.
  • Bu matrisin içinde \(0\) sayıları duvarları; \(1\) sayıları ise açık yolları temsil eder.
  • Labirentte yalnızca iki yönde hareket mümkündür: Aşağı veya Sağa.
  • Robotun bulunduğu noktada yalnızca bir yön, ya sağa ya da aşağıya gitmeye açıktır.

Sizden istediğimiz şey bir fonksiyon yazmanızdır. Bu görevde de hangi dili kullanacağınız tamamen size bırakılmakla birlikte hangi yazılım dilinin daha efektif sonuç vereceğini düşünmek de görevin bir parçasıdır. Yazacağınız fonksiyon labirent matrisini parametre olarak almalı ve robotun çıkışa ulaşıp ulaşamayacağını kontrol etmelidir.

  • Eğer robot çıkışa ulaşabiliyorsa, fonksiyon \(1\) döndürmelidir.
  • Eğer robot çıkışa ulaşamıyorsa, fonksiyon \(0\) döndürmelidir.

Yazmış oldunuz fonksiyonu aşağıdaki matrisler ile kontrol edebilirsiniz:

Fonksiyon aşağıdaki matris için \(1\) değerini döndürmelidir.

\[ \begin{bmatrix} 1 & 1 & 0 & 0\\ 0 & 1 & 1 & 1\\ 0 & 0 & 0 & 1\\ 0 & 0 & 0 & 1\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \]

Fonksiyon aşağıdaki matris için \(0\) değerini döndürmelidir.

\[ \begin{bmatrix} 1 & 1 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 1 & 1 & 1\\ 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 1\\ \end{bmatrix} \]

Görev 1.3 : Matematik ve Yazılım – Basit Bir Problem: Bir Dirhem Kod Bir Fersah Matematik#

Bu bölümümüzde tanımlanan bir matematik problemi için verilen formülleri anlama ve anladığınız matematiği koda dökme yeteneğinize odaklanmak istiyoruz. Amacımız küçük bir makale okuma simülasyonu kurmak ve makale okurken karşılaştığınız formüllerin nasıl anlamlandırılacağını ve formüller okunurken “Ben bunun kodunu nasıl yazabilirim?” sorusunun cevabını somutlaştırmaktır. Bu bağlamda tanımladığımız problem şu şekildedir ve istediğiniz yazılım dili ile istediğiniz kaynaktan bu problemi çözebilirsiniz. Lakin bizlere sunduğunuz çözümü sunum olarak detaylı bir şekilde anlatmanızı bekliyoruz.

2 boyutlu uzayda aşağıda verilen 5 nokta koordinatı vardır:

\[ (x_1, y_1) = (50, 120) \]
\[ (x_2, y_2) = (98, 245) \]
\[ (x_3, y_3) = (125, 202) \]
\[ (x_4, y_4) = (174, 55) \]
\[ (x_5, y_5) = (201, 215) \]

Bu verilen noktalar kullanılarak 4-parçalı (interval) kübik spline üretimi gerçekleştirilmiştir. Genel kübik spline formülü her bir \(i\) aralığı için şöyledir:

\[ \text{Spline}(d_i) = C_{3,i} \cdot d_i^3 + C_{2,i} \cdot d_i^2 + C_{1,i} \cdot d_i + C_{0,i} \]

Aşağıda sırasıyla iki tane \(x\) ve \(y\) spline’ına ait katsayılar verilmiştir. Ve bu iki spline ortak bir \(d\) parametresine karşılık üretilmiştir:

\[ \begin{array}{|c|c|c|c|c|} \hline \textbf{X-Spline} & \textbf{$C \cdot x_{3,i}$} & \textbf{$C \cdot x_{2,i}$} & \textbf{$C \cdot x_{1,i}$} & \textbf{$C \cdot x_{0,i}$} \\ \hline \textbf{Interval-1 (i=1)} & 1.4085571e-05 & -0.002942971893067 & 0.5 & 50 \\ \hline \textbf{Interval-2 (i=2)} & -2.9320880e-05 & 0.00271516885470301 & 0.46949735179 & 98 \\ \hline \textbf{Interval-3 (i=3)} & 2.87820146e-06 & -0.0017510469556605 & 0.51844968587 & 125 \\ \hline \textbf{Interval-4 (i=4)} & 1.91107251e-06 & -0.0004131011472128 & 0.18311146312 & 174 \\ \hline \end{array} \]
\[ \begin{array}{|c|c|c|c|c|} \hline \textbf{Y-Spline} & \textbf{$C \cdot y_{3,i}$} & \textbf{$C \cdot y_{2,i}$} & \textbf{$C \cdot y_{1,i}$} & \textbf{$C \cdot y_{0,i}$} \\ \hline \textbf{Interval-1 (i=1)} & - 0.0001021160949707 & 0.0198983795707225 & 0.1 & 120 \\ \hline \textbf{Interval-2 (i=2)} & 0.000112215870841175 & - 0.021121415550008 & -0.06376355855870 & 245 \\ \hline \textbf{Interval-3 (i=3)} & 4.23264462370854e-05 & - 0.004028466608533 & -1.34072390411888 & 202 \\ \hline \textbf{Interval-4 (i=4)} & - 7.6436714625849e-05 & 0.0156471857708351 & 0.459615282170275 & 55 \\ \hline \end{array} \]
\[ \begin{array}{|c|c|c|c|c|c|} \hline \textbf{$d$ parametresi} & \textbf{Nokta-1} & \textbf{Nokta-2} & \textbf{Nokta-3} & \textbf{Nokta-4} & \textbf{Nokta-5} \\ \hline \textbf{Değer (Value)} & 0 & 133.89921 & 184.673225 & 339.6248302 & 501.886963\\ \hline \end{array} \]
  • Cubic Spline
    Grafik-1: Çıktı Cubic Spline

  • d-X
    Grafik-2: d Parametresine Karşılık Çıktı X Spline

  • d-Y
    Grafik-3: d Parametresine Karşılık Çıktı Y Spline

Verilen bu değerler için ise şunları yapmanız gerekmektedir.

  • Verilen \(d\) parametresinin aralığı boyunca eşit aralıklar ile 10000 nokta üretmelisiniz. Ürettiğiniz bu noktalar sizin örnekleme noktalarınız olacaktır.
  • Aşağıda verilen denklemlerin hepsini her bir örnekleme noktası için gerçekleyerek denklemlerin hepsinin grafiğini çıkarmanız gerekmektedir (i: Interval indeksi):

    • \[\text{Position}(p_i) = (C \cdot x_{3,i} + C \cdot x_{2,i} \cdot d_i + C \cdot x_{1,i} \cdot d_i^2 + C \cdot x_{0,i} \cdot d_i^3)i + (C \cdot y_{3,i} + C \cdot y_{2,i} \cdot d_i + C \cdot y_{1,i} \cdot d_i^2 + C \cdot y_{0,i} \cdot d_i^3)j + (C \cdot z_{3,i} + C \cdot z_{2,i} \cdot d_i + C \cdot z_{1,i} \cdot d_i^2 + C \cdot z_{0,i} \cdot d_i^3)k \]
    • Denklemleri bulunuz ve sunumunuzda yer veriniz, yine bu denklemleri işleyip grafiğini çizdirmeniz gerekmektedir:

      • \[ \frac{\partial p_i}{\partial d_i} \]
      • \[ \frac{\partial^2 p_i }{\partial d_i^2} \]
    • Aşağıdaki denklemleri gerçekleyiniz ve grafiklerini çizdiriniz. Verilen U bir sabittir ve işleme sabit olarak girmelidir:

      Bir Tavsiye

      Zorunlu olmamak ile birlikte U’nun değişimine göre grafiklerin nasıl değiştiğini gösterebilmek zorlu ve size bir şeyler öğreteceğini düşündüğümüz bir görev olarak gözükmektedir, üzerinde çok fazla oyalanmayın ama proje canavarının naçizane bir önerisi :)

      • \[ \sqrt{\left( \frac{\partial x_i}{\partial d_i} \right)^2 + \left( \frac{\partial y_i}{\partial d_i} \right)^2 + \left( \frac{\partial z_i}{\partial d_i} \right)^2} = \frac{\partial s}{\partial d_i} \]
      • \[\frac{\partial p_i}{\partial t} = \frac{\frac{\partial p_i}{\partial d_i}}{\frac{\partial s_i}{\partial d_i}}U \text{ ve U = 20}\]
      • \[\frac{\partial^2 p_i}{\partial s^2} = \frac{(\frac{\partial p_i}{\partial d_i} * \frac{\partial^2 p_i}{\partial d_i^2} )}{(\frac{\partial s}{\partial d_i})^3}\]
      • \[\frac{\partial^2 p_i}{\partial t^2} = ({\frac{\partial^2 p_i}{\partial s^2}}*{\frac{\partial p_i}{\partial t}})U\]

Aslında proje başı canavarından bu kadar basit bir problem beklemezdiniz değil mi? Evet, yanılmıyorsunuz aslında biz de beklemezdik ama matematiksel görünüzü ve kodlama yeteneğinizi ölçmek için belki de güzel bir problemdir ne dersiniz? Bizce denemeye değer :)

Sorular için iletişime Geçebilirsiniz, aslında sorunuzun cevabını alacağınızı garanti edemiyoruz proje başı canavarının bize kızmasını istemeyiz, problemlerde yanlış olduğunu düşündüğünüz yerde bizden yardım isteyebilirsiniz, iyi ve hayırlı çalışmalar herkese. Bütün bunları yaparken ne için çalışmayı hedeflediğinizi düşünmeyi ve ilk bölümlerde bahsedilen mana köprüsünden geçmeyi unutmayın.