Ben DIY fiziği öğrenmek başladım ve ben en temel düzeyde entegrasyonu uygulanması hakkında soru (yani bu var değil bir Euler RK4 vs soru).
Karşılaştığım neredeyse her örnek integrate(), son güncellemeden bu yana zaman aşımını alan ve son güncellemeden bu yana hızlandırmayı (ve / veya hız ve / veya konum) güncelleyen bazı işlevlere sahip.
En basit biçimde: position += velocity * deltaTime
Ancak, bir işlevi değiştirerek kolayca elde edilebildiğinde neden bu şekilde biriktiğini anlamıyorum . Örneğin: getPosition = makeNewFunction()imzası olan bir şeyi döndürebilen Time -> Positionve bu işlevin iç işleyişi uygun matematiksel formülle üretilir.
Bu şekilde, birikim olmaz ... pozisyonun ne zaman alınması gerektiğine göre, o zamana kadar o fonksiyonu çağırır.
Acemi anlayışım, bunun birikimden kaynaklanan hataları da önleyeceğidir ... peki bu neden çalışmıyor, neyi kaçırıyorum?
(I FWIW did o da aynı anda birkaç şey deniyor olsa birlikte bu fikir-kavramının temel bir kanıt koymak o en temiz örnek değil bu yüzden: https://github.com/dakom/ball-bounce-frp )
DÜZENLEME 1: açıklamalarda belirtildiği gibi, ben olduğunu işaret etmek muhtemelen önemli değil henüz hızlanmayı değiştirerek veya pislik ve sürekli ivme daha yüksek dereceden entegrasyon gerektiren diğer şeylerle uğraşan öğrendik.
DÜZENLEME 2: Burada fikir bazı temel örnek kod ve sözde JavaScript sözdizimi - nota getKinematicPositionedilir kısmen uygulanan bu sadece Zaman yeni bir fonksiyon dönüyor böylece -> Pozisyon:
Ben burada duruyorum ama getVelocitysanırım başka bir şey olabilir ...
getKinematicPosition = initialVelocity => acceleration => time =>
((.5 *acceleration) * (time * time)) + (initialVelocity * time);
getPosition = getKinematicPosition ([0,0,0]) (GRAVITY);
onTick = totalTime => {
position = getPosition (totalTime);
onCollision = () => {
getPosition = changeTheFunction(totalTime);
//changeTheFunction uses totalTime to base updates from 0
//it could use getKinematicPosition or something else entirely
}
}
