• 18-05-2017, 13:29:43
    #1
    Kod halledilmiştir.
  • 18-05-2017, 18:35:45
    #2
    Merhaba, aşağıya birkaç not düştüm. Ama konumun uzmanı değilim sorumluluk kabul etmem. Daha detaylı bilgi için bağlantı:


    https://vimeo.com/210103622


    from visual import*
    ###VPyton modülünü ekliyor. Bu modül Python'la standart olarak gelmediği için ayrıca import edilmedi gerekiyor (ama sorunlu biraz, geçen yüklemeye çalıştım başaramadım, sıkılıp bıraktım)
    display(width=800,height=800,center=vector(6,0,0),background=color.white)
    ###anlaşılan bu ekranın boyunu rengini vs. ayarlıyor.
    floor=box(pos=vector(0,11.1,0),size=vector(6,0.2,1.2),color=color.cyan)
    ###bu arka duvara benziyor. sanırım pos xyx koordinat sisteminde konumu vektör olarak veriyor size'da benzer şekilde boyut tanımlıyor.
    floor=box(pos=vector(0,-1.7,0),size=vector(14,0.2,4),color=color.cyan)
    ###yukarıdaki gibi ama bu sanırım yayın üzerinde hareket edeceği zemin
    Mass=box(pos=vector(0,0,0),velocity=vector(0,3,0),size=vector(1,1,1),mass=1.0,color=color.orange)
    ###Bu bir kutu anlaşılan. Bu kutu hareket edecek. mass kütlesi ve aşağıdaki denklemlerde işe yarayacak, şimdilik dursun bir kenarda. velocity hız, hareket ettirecek kutuyu
    pivot=vector(0,11,0)
    ###vektör tanımlıyor sanırım aşağıdaki yayı tanımlarken kolaylık olsun diye yaptı. Zaten başka bir yerde kullanmıyor.
    spring=helix(pos=pivot,axis=Mass.pos-pivot,radius=0.4,constant=1,thickness=0.1,coils=20,color=color.magenta)
    ###İşte bir yay. Özellikler açık sanırım. Güzel modülmüş box diyorsun kutu çiziyor, helix diyorsun yay çiziyor. Güzel iş...
    eq=vector(0,4,0)
    ###Yine vektör tanımlıyor. "equilibrium point" demek istiyor galiba. Yayın ne gerildiği ne sıkıştığı nokta olabilir diye düşünmekten kendimi alamıyorum.
    ###box, helix vs. VPython modülünün nesneleri. Tam özellikleri için VPython modülünün yardımına bakılabilir. Buraya kadar pek bir şey yok sanırım. Sadece sahneyi tasarlıyor. Aşağıda sahneye hareket vermeye, can vermeye başlıyor.
    t=0
    ###Simülasyon zamanını sıfırdan başlatıyor. Klasik numara.
    dt=0.01
    ###Saniyenin yüzde birinde hareket ettirecek. Normalde a (ivme), v (hız) ve x (konum) sürekli olarak değişiyor. Ama örneğin 2.04 ile 2.05 zamanı arasında ne kadar hareket olduğunu bulmak için 2.04 zamanındaki ivmeyi hesaplıyor ve 2.05 zamanına kadar sabit kalacağını kabul ediyor. Bu şekilde hızı hesaplıyor ve hızın da sabit kalacak kabul edip konumun ne kadar değişeceğini hesaplıyor yanlış anlamadıysam.
    while(t<60): ###50 saniye boyunca hareket ettirecek yayı
        rate(100) ###Bu döngüyü saniyede en fazla 100 ile sınırlıyor galiba. Yoksa çok hızlı hareket edecek.
        acc=(eq-Mass.pos)*(spring.constant/Mass.mass)
        ###(eq-Mass.pos) bu yayın denge konumundan ne kadar gerildiğini gösteriyor. Yayı denge konumundan bozduğunda uygulanan kuvvet germe/ittirme miktarına bağlıdır malum. Yani cismin belirli bir konumunda üzerine uygulanan kuvvet cismin denge konumundan ne kadar uzak olduğuna bağlıdır. Dolayısıyla cismin ivmesi cismi konumuna bağlı olacak. İvmeyi cismin komuna bağlı olarak hesaplıyor. Ama formülü güzel kurmamış galiba. Normalde F = ma -> -kx = ma -> -kx/m = a (standart x ekseninde cisim 0'dan sağa doğru giderse kuvvet eksi yönde olacaktır bu nedenle artı yay sabitinin önüne eksi getirmek gerekir. Burada spring.constant artı olarak tanımlanmış ama eksi nerede diye aranırken şunu fark ettim. (Mass.pos - eg) (eq - Mass.pos) yazmak suretiyle eksiyi halletmeye çalışmış. Kötü bir düşünce. Cinliğin lüzumu yok ama aynı hesaba galiyor. 
        Mass.velocity=Mass.velocity+acc*dt
        ###Yukarıda hesaplanan ivme dt süresi boyunca sabit kabul edilerek dt aralığında hızın ne kadar değişeceği hesaplanarak yeni hız bulunuyor.
        Mass.pos=Mass.pos+Mass.velocity*dt
        ###Yeni bulunan hız yine dt boyunca sabit kabul edilerek dt aralığında konumun ne kadar değişeceği hesaplanarak yeni konum bulunuyor.
        spring.axis=Mass.pos-spring.pos
        ###Yayın yeni şekli anlaşılan cismin konumundan yayın ilk konumu çıkarılıyor vs.
        t=t+dt
        ###Zamanı arttırıyor. 60 olunca döngüden çıkmak için başka bir işe yaramıyor sanırım.