İnsanlara güdümlü füzelerin hedeflerini yörüngede dönmesini nasıl önler?


78

Sürtünmesiz bir 2D uzay oyunu geliştiriyorum ve hedef güdümlü bir füze yörüngesini yapmayı çok kolay buluyorum. Yörünge karşıtı stratejiler hakkında merak ediyorum.

Basit bir örnek, doğrudan hedefine doğru hızlandıran bir güdümlü füzedir. Eğer bu hedef füzenin yörüngesine dik hareket etseydi o zaman durursa, füzenin hedefe doğru ivme kazanması, kendi hızının üstesinden gelmek için yeterli olmazdı ve füze tasvir edildiği gibi hedefin etrafında yörüngeye sürülebilirdi:

Yörünge Sorunu

  • Çerçeve 1'de, füze hedefi için dümdüz gidiyor, problem yok.
  • Çerçeve 2'de, hedef gösterildiği gibi yeni bir konuma taşındı. Füze, var olan süratinden dolayı hedefin (siyah) olduğu yere doğru hareket ederken doğrudan hedefe doğru (kırmızı) hızlanmaya devam ediyor.
  • Çerçeve 3'te, füzenin hızı füzeyi hedefin (siyah) etrafına taşımaya devam ederken, ivme vektörü füzeyi hedefe doğru çaresizce çekmeye çalışır.
  • 4 ve daha sonraki karelerde füze, hedef etrafında potansiyel olarak istikrarlı bir yörüngeye düşer ve asla amacına ulaşmaz. Siyah oklar bir hız vektörünü gösterirken kırmızı çizgiler aynı anda hızlanma vektörlerini gösterir.

Uzayda sürtünme olmadığı göz önüne alındığında, füzenin hızını yavaşlatan ve yörüngeyi daraltan hiçbir şey yoktur. Olası bir çözüm, hedefin "arkasına" geçmek olacaktır ve bu yörüngenin kapanmasına neden olacaktır, ancak bu programlama açısından nasıl yapılır?

Bir ana hat füzesinin hedefine ulaşmasını nasıl sağlayabilirim?


9
Bu aslında işleri yörüngeye dönüştürmenin son derece havalı bir yoludur.
Derek

Bu bana Euler entegrasyonunu hatırlatıyor. Tek yapmanız gereken zaman adımınızı sonsuz küçük yapmak, problemi çözmek!
Jeff

Bu efekti oyunumda uygulamak istiyorum! : D
Zolomon


6
@Deza Yörüngenin tanımı budur . Yörünge nesnesi, başka bir nesnenin merkezine doğru merkezcil bir kuvvetle hızlanmaktadır.
bobobobo

Yanıtlar:


49

Öncelikle, füzenin referans çerçevesinde hangi hızlanmanın uygulanacağına ilişkin tüm hesaplamaları yapmanız gerekir (füzenin durağan olduğu ve etrafındaki her şeyin etrafında hareket ettiği, oyun motorlarında da genellikle "nesne koordinatları" veya "yerel koordinatlar". bizim durumumuzda da hızın tamamen sıfır olmasını istiyoruz.

O zaman fikir, hedefi hedeflemek değil, hedefin tahmini etki zamanında olacağı yeri hedeflemektir. Genel algoritma şöyle gözüküyor:

  1. Füzenin hedefe ulaşmasının ne kadar zaman alacağını tahmin edin. Hedef doğrudan üstüne uçuyorsa (unutmayın, füze durur ), mesafe / hız hesaplamak kadar basit olabilir , diğer durumlarda daha karmaşık olabilir. Eğer hedef deneyip kaçabilirse, yine de mükemmel bir tahminde bulunamazsınız, bu yüzden çok kesin olmamak tamam.

  2. Hedefin sabit hızını (1. derece tahmini) veya sabit ivmesini (2. derece tahmini) varsayarak, yukarıdaki tahmini zamanda nerede olacağını hesaplayın.

  3. Füzenin aynı anda kabaca aynı noktada olmasına neden olacak ivmeyi hesaplayın.

  4. Hızlanmayı füzenin küresel olana atfetme çerçevesinden tekrar yansıt, bunu kullan.

Buradaki önemli kısım, zorlu oyun parkında zaman tahmini yapmak ve bunu yaparken füzenin hızlanma yeteneklerini unutmamaktır. Örneğin, "hedef önümüzde dürüst ve bizim tarafımızda uçuyor" için daha iyi bir tahmin denklemi çözmek olacaktır.

mesafe = hız x süre + 1/2 x ivme x süre 2

... zaman zaman (füzeden uzak uçan nesneler için negatif hız kullanın ), standart kuadratik formülü kullanmak istediğiniz çözümle ...

zaman = (√ ( hız 2 + 2 x ivme x mesafesi ) - hız ) / ivme

Ek parametreler eklemek - örneğin sürükle - hızlı bir şekilde bunu cebirsel çözüm içermeyen diferansiyel denklemlere dönüştürür. Bu yüzden roket bilimi bu kadar zor.


Sanırım tam olarak ihtiyacım olan şey bu. Daha önce hiç yerel koordinatlarda düşünmedim.
John McDonald

5
Mükemmel cevap. Bir yan not olarak, birçok izleme füzesi bu şartlarda otomatik olarak patlayacak şekilde tasarlanmıştır: 1) pistin belli bir mesafesine ulaştı ve 2) pistle olan mesafe şu anda artıyor. Bu, az bir maliyetle biraz hoş bir davranış ekleyebilir.
Patrick Hughes,

1
Bu harika bir cevap. Silah için sürekli bir ivme kullandım (en gerçekçi olduğunu düşündüm), gelmesi için gereken süreyi tahmin ettim (d = v t + 1/2 * a t * t 'nin yeniden düzenlenmesi ve t için çözülmesi). Gizli sos, hedefin mevcut hızına ve tahmini etki süresine verileceği projenin tahmini zamanını geri beslemekti. İyi çalışıyor.
bobobobo

1
Sanırım bu bir tür ölü hesaplaşma algoritması
bobobobo

42

@Martin Sojka zaten ne yapacağınızı söyledi. Yanıtını geliştirmek yerine, size daha basit bir yaklaşım önermek istiyorum: DELOCK

Bir aracın öngörülen yörüngesinde dediğim gibi ? Sınırlı yönlendirme özelliklerine sahip nesneler, bir çift gölge sirkü “yansıtır”: doğrudan yönlendirme ile erişilemeyen iki bölge (daha yüksek boyutlarda bir torus ve bir hipertor).

Hedefinizin bu tür direksiyon gölgelerinden birine girdiğini gördüğünüzde, hedefinizi hedeflemeyi durdurabilir ve sınırlı bir süre için başka bir yön tutabilirsiniz.

Delocking tetiği, tori'nizi bir (çift) koni * ile yaklaştırarak kolayca hesaplanabilir:

Delock tetiği

Skaler ürünü (normalleştirilmiş) yön vektörünüz ile hedef yer değiştirme vektörünüz ( Hedef - Nesne / | Hedef - Nesne |) arasında hesaplamanız gerekir .

Skaler ürün sıfıra giderken, hedef yönünüz dairesel bir yörüngeye ** neden olan yönünüze dik olur. Hedef camgöbeği bölgeye düştüğünde, direksiyon yönünüzü tersine çevirebilirsiniz, böylece ulaşılamaz alanın dışına koyabilir ve yeniden konumlandırabilirsiniz.

* Dürüst olmak gerekirse, bu bir koni değil ... kesişimden geçen ve bisector çizgisine dik olan bir eksen etrafındaki paralel olmayan iki çizginin (yarı) devrimi tarafından oluşturulan başka bir çizgili yüzey türüdür; 2B düzlemdeki izdüşüm çift koni ile aynıdır, ancak dönme ekseni koniyi oluşturana diktir.

** Bu yörüngenin dairesel, eliptik ve hatta kapalı olması muhtemel değildir. Şans eseri, yörüngenin 2B veya hatta diğer canavarlarla 3 boyutlu ve daha büyük boyutlarda bir spirografı takip eden yolu (bir hipotrokoid) takip etmesidir. Yine de bu tür eğrilerin merkezine ulaşamazsınız ve "dairesel" yörünge şeklinde daireler gibi görünürler.


+1 Füzenin hızlanma vektörünün seyahat yönüne dik olması ile sınırlı olduğu durum için iyi fikir. Ben bunun bu soru için geçerli olduğunu sanmıyorum.
Martin Sojka

@Martin Sojka ivme vektörü bir radyal diğeri ise yöne teğet iki bileşene ayrılabilir. Birincisi ne kadar dönebileceğinizi, ikincisi ne kadar hızlandıracağınızı / azaltabileceğinizi söyler.
FxIII

1
Evet, ve göreceli güçlerini birbirlerinden bağımsız olarak seçmekte özgürsünüz (yani, eğer hızlanma vektörünün yönü ve gücü hareket vektöründen bağımsız ise), "dışlanma daireleri" kaybolur.
Martin Sojka

@Martin Sojka Hızlanma gücü üzerinde herhangi bir kısıtlama yok mu?
FxIII

1
+1 Bu oldukça havalı. Bunu daha önce hiç düşünmedim. Muhtemelen bunu @ Matin'in cevabı ile birlikte kullanmaya çalışacağım
John McDonald

8

Rehberlik sisteminiz doğrudan hedefe doğru hızlanmanın nesnelerin çarpışmasına neden olacağı varsayımına dayanmaktadır. Bu varsayımın yanlış olması nedeniyle, bu varsayıma dayalı rehberlik AI aynı şekilde başarısızdır.

Bu yüzden doğrudan hedefe doğru hızlanmayı bırakın . Hedefin pozisyonunun füzenin hareket yönüne biraz dik olup olmadığını tespit etmek için bir mantık ekleyin. Eğer öyleyse, o zaman füzenin hedefe doğru hızlanması, ancak aynı zamanda ileri hareketini yavaşlatması gerekiyor. Böylece doğrudan hedefe doğru ilerlemek yerine, hızlanma yönünü saptırır, böylece hareket yönündeki mevcut hız yavaşlar.

Ayrıca, çok yavaş gitmediğinizden emin olmak için bir tetikleyiciye ihtiyacınız olacaktır. Öyleyse bazı eşik hızlarını ekleyin, öyle ki, eğer bu eşiğin altındaysanız, önyargılı olmayı bırakacaksınız.

Son bir şey: hiçbir rehberlik sistemi mükemmel olmayacak. Füzelerin gerçek hayatta hedefleri yakalayabilmelerinin nedeni, hedeflerin füzelerin kendisinden çok daha yavaş hareket etmeleri ve hedeflerin özellikle çevik olmamalarıdır (nispeten konuşma). Eğer füzeleriniz kovaladıkları hedeflerden çok daha hızlı olmayacaksa, o zaman çok özleyecektir.


2
“Hedefler özellikle çevik değil” .. değil mi?
bobobobo

5

Oyunlarda (ve gerçek hayatta) bunun için kullanmanın en basit ve gelişmiş yöntemi Oransal Gezinmedir.

İki nesne (füze ve hedef) birbirleri arasında sightline değişiklik olmadan aynı yönde seyahat Aralığı (CBDR) mantık azalan sabit Rulman, altında, olacaktır çarpışır.

Görüş Hattı veya Görüş Hattı (LOS), füze ile hedef arasındaki hayali bir çizgidir - füze konumu ile hedef konum arasındaki vektör. Bu LOS'un açısal değişim oranı LOS Dönme Hızıdır.

LOS Dönme Hızı sıfır olduğunda, görüş hattı artık değişmez - iki nesne şimdi çarpışma rotasındadır. Kendinizi futbol / futbol oynarken birisini kovalarken düşünün. Onu, vücudunun görüş alanınızda "donmuş" göründüğü bir şekilde yönlendirirseniz (aramızdaki görüş hattı artık değişmez), vücudunuzun donmuş görünmesini sağlamak için koşma hızınızı sürdürdüğünüz sürece onunla çarpışırsınız. senin açından.

Orantılı Gezinme (PN) altında, füze LOS Dönme Hızından "N" kat daha hızlı. Bu, füzeyi LOS Dönme Hızı sıfıra gelinceye kadar hedefe yönlendirmeye zorlar - yani füze ve hedef görüş hattı artık değişmediği için donmuş halde görünür - şimdi çarpışma rotasındalar. "N" değişkeni Gezinme Sabiti (sabit çarpan) olarak bilinir.

Füzenin rehberlik komutu aşağıdaki gibi verilmelidir:

Hızlanma = Kapanış Hızı * N * LOS Hızı

LOS Hızı, LOS vektörünü ölçerek (hedef pozisyon - füze pozisyonu) ve değişkenini saklayarak kolayca elde edilebilir. Yeni çerçeveden (LOS1) gelen LOS vektörü, LOS deltası oluşturmak için eski çerçeveden (LOS0) LOS vektörüyle çıkarılır - şimdi ilkel bir LOS dönme hızına sahipsiniz.

Kapanış Hızını basitleştirmek için, sadece mevcut LOS vektörünü yerine kullanabilirsiniz.

Hızlanma = (target_pos - missile_pos) * LOS_delta * N

N, navigasyon sabitidir - gerçek dünyada, tipik olarak 3 ila 5 arasında ayarlanır, ancak oyundaki gerçek uygulanabilir rakam, LOS oranını / deltasını türettiğiniz örnekleme oranına biraz bağlıdır. Rastgele bir sayı deneyin (3'ten başlayarak) ve oyunda istediğiniz öncü efekti görene kadar 1500, 2000 vb .'ye kadar artırın. Navigasyon sabitinin ne kadar yüksek olduğunu, füzenin uçuşun erken saatlerinde LOS hızındaki değişikliklere daha hızlı tepki vereceğini unutmayın. Hedef roket simülasyon modeliniz biraz gerçekçi ise, aşırı navigasyon sabiti füzenizin aerodinamik kapasitesini aşırı yükleyebilir, bu nedenle deneme yanılma temelinde dengeli bir sayı kullanmalısınız.


4

Martin ve Nicol'in diğer cevaplarının işaret ettiği gibi, muhtemelen füzenizi doğrudan hedefe değil, daha sonra hedefle çarpışacak şekilde yönlendirmek istiyorsunuz. Bununla birlikte, Martin tarafından açıklanan yöntem karmaşıktır ve Nicol tarafından açıklanan yöntem yetersizdir.

Bir füzeyi yönlendirmek için daha basit bir yöntem - ama yine de oldukça etkili - açısını füze ile hedef arasındaki açı değişikliğine göre ayarlamaktır. Her tiklemede, füzeden hedefe kadar olan açıyı hesaplar ve önceki tikten gelen açı ile karşılaştırırsın. Fark, füzenin bakış açısıyla yapmak istediğiniz farktır. Eğer açı bir kene içinde 0.77 ve bir sonrakide 0.75 ise, füzenin açısını -0.02'ye ayarlamak istersiniz. Bu yöntem basittir ve hedef füzenin "önünde" olduğu sürece, seçilen rota açısından çok etkilidir. Aynı zamanda sadece 2d'de değil, herhangi bir sayıda boyut için geçerlidir.

Yine de aklınızda bulundurun:

  • Bu yöntem, füze ve hedefin aynı hızda olması ve paralel olarak seyahat etmesi durumunda kırılır. Eh hala teorik olarak füze için bir çarpışma rotası çiziyor, sadece sonsuz zaman alıyor :) pratikte füze her zaman hedeften daha hızlı olmalı, ancak aynı hızları varsa paralel olduklarını belirlemek için bir köşe kutusu eklemeniz gerekir .

  • Hedef ve füze aynı çizgide, ancak ters yöne uçuyorsa yöntem kırılır. Bu gerçek dünyada gerçekleşemez, ancak ayrı bir oyunda nadir değildir. Bunu test etmek için yukarıdaki algoritmaya bir köşe büyüklüğü kontrolü eklemeniz gerekir.

  • Eğer füzeniz sınırlı bir dönüş yeteneğine sahipse, bundan daha fazla dönmesi gerektiğinde maksimum dönüş yapmasını sağlayın. Füze yeterince uzak olduğu sürece yine de işe yarayacak. Çok yakınsa, son kurşuna bakın.

  • Çarpışmayı kontrol ederken yumuşak olmayı unutmayın. Gerçek dünyada birçok füze bir "öldürme bölgesi" üretmek için savaş başlarına güvenir, bu yüzden sadece hedefle yaklaşmaları gerekir, aslında çarpışması gerekmez.

  • Sonunda, pratikte füze hala ıskalayabilir ve bu da bizi asıl sorunuza geri getirir. Bence iyi bir yol, bir kaç kenara gidilecek yeri devre dışı bırakmak, bir mesafeye ulaşmak için izin vermek ve sonra tekrar hedeflemektir. Bence, fxiii tarafından ölü bölgeleri tanımlamak için önerilen yöntem, homing'i ne zaman kapatmanız gerektiğini tespit etmenin harika bir yoludur.


1

Geçmişte üzerinde çalıştığım oyunlar için 'yeterince iyi' bulunan birkaç basit seçenek:

1) Baktığınız sahnenin çözünürlüğü izin veriyorsa, hedefin yakınında olduğunda nesne patlayabilir (Bu, en yaygın gündüz güdümlü füzelerin aslında her durumda işe yarayacağına inanıyorum). Yörüngedeki menziliniz nesnenin yaklaşık iki katı büyüklüğündeyse, bu muhtemelen sizin için kötü bir sonuç vermeyeceği için sizin için çalışmayacaktır.

Çözümünüzdeki son hedefiniz, yalnızca füzenizin hedefe ulaştığından emin olmaksa, o zaman ben sadece hedefi vurmak için varım. Yine, bu sadece çözümün nasıl göründüğüne bağlı olacaktır.

2) Eğer füzenizin hedefinize dik açıda olduğunu tespit ederseniz, bu, kilidin 'kırıldığı' nokta olabilir ve füze, hedef tekrar füzenin önüne gelene kadar düz hareket eder.

Mümkün olduğunca basit çözümleri her zaman tercih ederim. Ana güdümlü füzenin kullanılmakta olan silahlardan sadece biri olduğu bir oyun yapıyorsanız, oyuncuların bir salvoyu ateşlemeleri ve en kısa sürede sürekli nişan silahlarına geri dönmeleri muhtemel olduğundan muhtemelen bunlardan kurtulabilirsiniz. Ancak bir füze simülasyonu yapıyorsanız, açıkça diğer cevaplardan biri daha iyi bir seçimdir.

Bu yardımcı olur umarım.


0

Daha önce de belirtildiği gibi, hedefin şu anda olduğu yer yerine, oraya ulaştığınızda hedefin olması beklenen yere yönelik füzeyi hedeflemelisiniz. Bu, MOST füzelerinin yörüngeye girmesini engeller, ancak hedef tam olarak kaçarsa, bir yörünge hala mümkündür. Bu, uçak pilotları tarafından gelen füzeleri atlatmak için kullanılan meşru bir taktiktir - füze sizden daha hızlı gidiyor çünkü daha büyük bir dönüş yarıçapına sahip olacak ve doğru anda keskin bir çarpışma devam edecek. (Her ne kadar yakınlarda bir patlamadan dolayı hala risk altında olabilirsiniz.)

Hedefi izleyebilen ve hala iten bir füze ile karşı karşıya olduğumuzdan, hedef, FxIII'nin konuşmasının bahsettiği bölgelerden birine girerse, bir yörünge durumu alırsınız.

Ancak, bu sorunun çözümüne katılmıyorum. Bunun yerine, füzeleri bu şekilde programlarım:

eğer füze 90 derecelik bir hızla hareket ediyorsa, 360 derecelik bir hareket için hareket yörüngesindesiniz. Baskı hattını hareket hattından 120 dereceye ayarlayın. Füzenin yörüngesi, sert bir şekilde dönmediği için genişleyecektir, ancak füze de yavaşlayacaktır, böylece daha iyi manevralar sağlayacaktır. Hedefe ulaşılan menzil, ölü bölgenin çapını 1.25x'e açtığında (bu çapın basitçe ve sadece füzenin hızına bağlı olduğunu unutmayın, çalışma zamanında karmaşık bir hesaplama gerekmez) füze normal izleme davranışına döner.

Alternatif olarak, manken arama kafalarını kullanın - hedeflenen menzil sizi geri saymaktan vazgeçtiğinde.


0

Bunun eski bir soru olduğunu biliyorum, ancak şimdiye kadar verilen cevaplarda cevapsız bir şey olduğunu düşünüyorum. Orijinal soruda, füzeye (veya her neyse) hedefin konumuna doğru hızlanması söylendi. Birkaç cevap bunun yanlış olduğunu belirtti ve hedefin daha sonra olacağını düşündüğünüz yere ivme kazandırmanız gerektiğini belirtti. Bu daha iyi ama yine de yanlış.

Ne gerçekten yapmak istediğim değil hızlandırmak hedefe doğru ama hareket hedefe doğru. Bunu düşünmenin yolu, hedefte gösterilen hedef hızını (veya hedef konumun bir yansıması) ayarlamak ve daha sonra hangi ivmeyi uygulayabileceğinizi bulmaktır (ne tür kısıtlamalar varsa, yani bir füze muhtemelen hızlanamaz). İstediğiniz hızı elde etmek için doğrudan tersi yönde (hızın bir vektör olduğunu hatırlayarak).

İşte bu sabah uygulamamıştım ve çalıştığım bir örnek, benim için bir oyuncu AI için bir spor simülasyon oyununda oyuncu rakibini kovalamaya çalışıyor. Hareket, hızları güncellemek için bir zaman adımının başlangıcında hızlanmaların uygulandığı ve zaman aşımının süresi boyunca bu hızda kayma yapan nesnelerin uygulandığı standart bir “tekme kayma” modeli tarafından yönetilir.

Bunun türetilmesini yayınlarım, ancak bu sitede desteklenen bir matematiksel işaret bulunmadığını tespit ettim. Çok kötü! Sadece, bunun bir füze tipi nesne için geçerli olmayan ivmelenme yönünde hiçbir kısıtlamaya sahip olmadığımı ve bunun da bazı ekstra kısıtlamalar gerektireceğinden yola çıkarak, en uygun çözüm olduğuna güvenmelisiniz.

Kod python'dadır, ancak herhangi bir dil arka planında okunabilir olmalıdır. Basit olması için, her bir zaman adımının 1 uzunluğa sahip olduğunu ve hızı yansıtmak için uygun birimlerdeki hız ve ivmeyi ifade ettiğini varsayıyorum.

self.x = # current x co-ordinate
self.y = # current y co-ordinate
self.angle = # current angle of motion
self.current_speed = # current magnitude of the velocity
self.acc # Maximum acceleration player can exert on themselves
target_x = # x co-ordinate of target position or projection of it
target_y = # y co-ordinate of target position or projection of it
vx = self.current_speed * math.cos(self.angle) # current velocity x component
vy = self.current_speed * math.sin(self.angle) # current velocity y component
# Find best direction to accelerate
acc_angle = math.atan2(self.x + vx - target_x,self.y + vy - target_y)

Atan2 (a, b) işlevinin a / b'nin ters tanesini hesapladığını, ancak açıların hem a hem de b'nin işaretini bilmesini gerektiren bir dairenin doğru kadranına oturduğundan emin olun.

Benim durumumda, bir kez ivmelenmeye başladığımda, bunu hızın

vx_new = vx + self.acc * math.cos(acc_angle)
vy_new = vy + self.acc * math.sin(acc_angle)
self.current_speed = math.sqrt( vx_new**2 + vy_new**2)
self.angle = math.atan2(vy_new,vx_new)

Ayrıca yeni hızı oyuncuya bağlı maksimum hıza göre kontrol ediyorum ve buna göre değer veriyorum. Bir füze, araba ya da maksimum dönme hızına sahip bir şey durumunda (kene başına derece cinsinden), geçerli hareket açısına karşı hesaplanan idealine bakabilirsiniz ve bu değişiklik izin verilenden daha büyükse, açıyı şu şekilde değiştirin: idealine doğru mümkün olduğunca.

Bunun türetilmesi ile ilgilenen herkes için, ilk adım, hız, hızlanma hızı ve hızlanma açısı açısından zaman aşımından sonra oyuncu ile hedef arasındaki mesafeyi yazdım, sonra hızlanma açısına göre türevi kullandım. Bunu sıfıra ayarlamak, zaman aşımından sonraki oyuncu-hedef mesafesinin minimumunu, hızlanma açısının bir fonksiyonu olarak bulur, bu tam olarak bilmek istediğimiz şeydir. İlginçtir ki, hızlanma başlangıçta denklemlerde olsa da, gerçekte ne kadar hızlandırabileceğinizden bağımsız olarak en iyi yönü vermeyi iptal eder.


Bazı senaryolarda neredeyse doğrudan hız ayarını tavsiye ediyorum - bununla birlikte çoğunlukla kuvvete bağlı bir fizik sistemiyle entegrasyonu zor olabilir. Bu, füzelerin düzenli olarak ateşlendiği bir oyunsa, dikkat çeken bir oyun teknisyeni olmadığından "kaçmak" durumunda, küçük fizik riskinin önüne geçmek istemeyebilir ve bu teknisyenin oyuncu beklediği gibi çalıştığından emin olabilirsiniz. Her zaman için. Bu, bir RTS'de uzay aksiyon oyunundan daha anlamlı olabilir.
Katana314

0

Sabit bir dönüş oranı kullanıyorsunuz. Güzel, kusursuz dairesel yörüngeye neden olan tam olarak budur.

Bir rehberlik sistemi için daha gerçekçi bir yaklaşım, dönüş oranını ters hedef mesafeyle (daha az mesafe -> daha fazla dönüş oranı) değiştirmektir. Bu yörünge yerine bir spiral verir ve daha yavaş bir hedefle çarpışmayı garanti eder.

Aynı zamanda çok daha gerçekçi bir uçuş yolu verir. Sabit dönüş hızı doğal olarak mükemmel. Türbülansı simüle etmek için dönüş hızına rasgele değişiklikler de ekleyebilirsiniz. Yine, çok daha gerçekçi ve aslında kararsız yörüngeli senaryolardan kaçınabilirsiniz.

Kısmi denklemlere gerek yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.