Birkaç farklı şey. Öncelikle, bunun kısıtlı olmayan bir sorun olduğunu kabul etmeliyiz. Yani, aynı yönde dönmeye neden olacak şekilde ateş edebilen birçok itici kombinasyonu vardır. Sizin durumunuzda iticiler için yalnızca "açık" ve "kapalı" olmak üzere iki durum olduğunu ve tüm iticilerin eşit güç ürettiğini farz ediyorum.
İkincisi, modelinize göz kulak vererek, “kütle merkeziniz” aslında kütle merkeziniz gibi gözükmüyor. Neyse ki, bu tork için hesaplamaları etkilemez. Bununla birlikte, kütle yer değiştirme merkezi için yapılan hesaplamaları etkileyecektir. Bu seviyedeki doğruluğa önem verip vermediğinizden emin değilim, çünkü “kütle merkeziniz” en azından gerçek kütle merkezine en yakın karedir.
Üçüncüsü, belirli bir iticinin dönüşü nasıl etkileyeceğini hesaplamak istiyorsanız, verimsiz bir formül kullanıyor olsanız da haklısınız. Tork r x F
, büyüklüğü olan olarak hesaplanabilir r*F*sin(theta)
. Ancak bu durumda açıların hesaplanması verimsiz bir yöntemdir. Bunun yerine, torkun çapraz ürün tanımını doğrudan kullanmalısınız, çünkü bu, sahip olduğunuz gösterimleri kullanmak çok daha kolay olacaktır. Tüm vektörlerinizin z bileşeni olmadığından, çapraz ürün için formül büyük ölçüde kolaylaştırır.
Hesaplamanızın sonuçlarını değiştirmeden kodunuzu güncelleyebiliriz.
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
Bu çok daha hoş (ve daha hızlı).
Kendi cevabınıza göre çözümünüz, tüm iticileri doğru yönde tork ile ateşlemektir. Şimdi, bu sorduğunuz soruyu hemen hemen çözdü. Bununla birlikte, hat boyunca bir noktaya gelmesini bekliyorum, bir kullanıcı "döndür" düğmesini basılı tutarsa ve pozitif bir tork döndüren tüm iticileri potansiyel olarak en üst seviyeye getirdiğinde stratejinizin o kadar tatmin edici olmadığını göreceksiniz. Bunları döndürme (gerdiricilerden kuvvetleri gerçekten hesaplarsanız ya da sadece görsel olarak ateşlemelerini gösterirseniz ve ardından modelinizi sabit bir hızlanma ya da bir şeyle döndürürseniz, simülasyonunuzun ayrıntı seviyesinden emin değilim. Bu şekilde, iticileri en azından yaklaşık olarak doğru bir şekilde ateşlemelerini istiyorsunuz.
Gemideki net kuvveti dikkate almazsınız. İsteğe bağlı itici miktarlarınız olsaydı, bu durum oldukça karmaşık bir soruna dönüşebilirdi. Ancak, iticilerimizin yalnızca iki durumu olduğundan, analiz edilmesi oldukça kolaydır. Amacımızın burada tam olarak ne olduğundan emin değilim, bu yüzden iki farklı hedef hayal edebiliyorum: ilk önce toplam gücü en aza indirgemek istiyoruz, ancak yine de torku istediğimiz yönde tutarız. İkinci olarak, torkun toplam kuvvete oranını maksimize etmek istiyoruz.
Bir kenara, tüm iticilerin gücünü aynı anda etkileyen ek bir "itici ses seviyesi" kontrolü hayal edebiliyorsanız , o zaman bu kontrolü iki çözümünüzün eşit torka sahip olmasını sağlayacak şekilde ayarlayabilirdiniz ve ikinci çözümün yalnızca ilkinden daha küçük yer değiştirme. Bununla birlikte, iticileri ateşlemenin mümkün olduğunu, böylece sadece dönüp hiç hareket etmeyeceğinizi, her iki çözümün de aynı olacağını hatırlamamız gerekir.
Böylece, önceki paragrafın argümanlarına dayanarak ikinci çözüme geçeceğiz. Şimdi, toplam kuvveti analiz ederken, motorların işaret edebileceği sadece dört yön olduğunu not edebiliriz. Bu nedenle, x yönündeki toplam kuvvet, sadece sola işaret eden iticilerin sayısıdır, sağa işaret eden sayıdır ve aynı şekilde y yönü içindir.
Bu ana kadar yazdıktan sonra, onu optimize etmek için algoritma hakkında biraz daha düşünmem gerekiyor. Gönderimin geri kalanının olduğu gibi faydalı olduğunu düşünüyorum, bu yüzden gönderiyorum, ancak bu yapılandırmayı optimize etmenin en iyi yolunu bulduğumda güncelleme yapacağım (yaklaşık yanıt almanın birkaç yolunu düşündüm, ancak hiçbiri kesin değil).