3 Serbestlik Dereceli Uçuş Benzetimi

Kinematik Denklemler

Bu benzetimde roketin kinematik davranışı, başlangıç hızı ve uçuş yolu açısına bağlı olarak belirlenen hız bileşenleri kullanılarak Euler entegrasyonu yöntemiyle hesaplanmaktadır. Hesaplamalarda, roketin ateşleme noktasına göre X ve Z eksenleri esas alınmıştır.

Hız Denklemleri:
vx = v0 · cos(θ)
vz(t) = vz0 + g · t     (vz0 = – v0 · sin(θ))
Konum Denklemleri (Euler Entegrasyonu):
x(t) = x0 + vx · t
z(t) = z0 + vz · t + 0.5 · g · t2
Uçuş Yolu Açısı Hesabı:
θ(t) = arctan( – vz(t) / vx )
Varsayımlar:
  • Roket noktasal kütle/parçacık olarak kabul edilmiştir.
  • Hava direnci, motor itki kuvveti, aerodinamik sürükleme, aerodinamik kaldırma ve rüzgar etkisi ihmal edilmiştir.
  • Yerçekimi sabiti: g = 9.801 m/s²
  • Benzetim zaman adımı: Δt = 0.01 s

Benzetim Yapısı

Bu benzetim, HTML, JavaScript, Bootstrap ve Chart.js kullanılarak gerçekleştirilmiştir. Aşağıdaki kod bloğu, benzetimin temel yapısını ve sayısal entegrasyon yöntemiyle uçuş yörüngesinin nasıl hesaplandığını göstermektedir. Alttaki kod yalnızca algoritmanın bir örneğidir. Detaylı kod sitenin kaynakları içerisinde mevcut olup tablo vb. çıktı işlemleri alttaki koddan algoritma sadeliği için çıkartılmıştır.

// Başlangıç Değerleri
const initialSpeed = 100
const flightAngleDeg = 70
const dt = 0.01

// Sabit yerçekimi ivmesi (m/s²)
const g = 9.801; // m/s²

// Uçuş yolu açısı (radyan cinsine çevriliyor)
const flightAngleRad = flightAngleDeg * Math.PI / 180;

// Başlangıç koşulları:
// X yönünde hız: v_x = v0 * cos(γ)
// Z yönünde hız: v_z = - v0 * sin(γ) (Z ekseni aşağıya doğru tanımlı, bu yüzden yukarı hareket negatif)
let v_x = initialSpeed * Math.cos(flightAngleRad);
let v_z = -initialSpeed * Math.sin(flightAngleRad);

// Başlangıç konumları: x₀ = 0, z₀ = 0 (ateşleme noktası)
let x = 0;
let z = 0;
let t = 0;

// Tepe noktası takibi: maksimum yükseklik (-z değeri) ve bu anın zamanı
let maxHeight = 0;
let tAtMaxHeight = 0;

while (z < 0 || t == 0) {

    // Tepe noktasını güncelleme: yükseklik = -z (ateşleme noktasına göre)
    let currentHeight = -z;
    if (currentHeight > maxHeight) {
        maxHeight = currentHeight;
        tAtMaxHeight = t;
    }

    // Euler entegrasyonu ile hız ve konum güncellemeleri:
    // X yönü: hız sabit (dış kuvvet yok)
    x += v_x * dt;
    // Z yönü: hız artışı yerçekimi etkisiyle
    v_z += g * dt;
    z += v_z * dt;
    let totalSpeed = Math.sqrt(v_x * v_x + v_z * v_z);
    let flightPathAngleRad = Math.atan(-v_z / v_x);
    let flightPathAngleDeg = flightPathAngleRad * 180 / Math.PI;

    // Zamanı güncelle
    t += dt;
}
                        

Simülasyon Parametreleri

Benzetimin Doğrulanması

Aşağıdaki tabloda belirtilen başlangıç koşullarıyla benzetim çalıştırılmıştır:

Değer Birimi Değer
Pozisyon [m] [0, 0, 0]
Hız (bileşke) [m/s] 100
Uçuş Yolu Açısı [°] 70

Grafik: Menzil-yükseklik yörünge grafiği

Çıktı Tablosu

Aşağıdaki tabloda belirtilen başlangıç koşullarıyla benzetim çalıştırılmıştır:

Birimi Değer
Tepe Noktası Yüksekliği [m] -
Tepe Noktası Hızı (bileşke) [m/s] -
Tepe Noktası Zamanı [s] -
Son Pozisyon [m] [-, 0, -] -
Son Hız (bileşke) [m/s] -
Son Uçuş Yolu Açısı [°] -
Son Uçuş Zamanı [s] -

Belirli Aralıklarla Veriler

Zaman (s) X Pozisyon (m) Y Pozisyon (m) Vx (m/s) Vy (m/s) Hız Büyüklüğü (m/s) Uçuş Yolu Açısı (°)

Tüm Zaman Adımları İçin Veriler

Zaman (s) X Pozisyon (m) Y Pozisyon (m) Vx (m/s) Vy (m/s) Hız Büyüklüğü (m/s) Uçuş Yolu Açısı (°)