Một vài điều khác nhau. Đầu tiên, chúng ta cần nhận ra rằng đây là một vấn đề bị hạn chế. Đó là, có nhiều tổ hợp máy đẩy khác nhau có thể bắn để dẫn đến việc quay theo cùng một hướng. Tôi giả sử rằng trong tình huống của bạn, chỉ có hai trạng thái cho các bộ đẩy, "bật" và "tắt", và tất cả các bộ đẩy đều tạo ra lực bằng nhau.
Thứ hai, đánh dấu mô hình của bạn, có vẻ như "trung tâm khối lượng" của bạn không thực sự là trung tâm của bạn. May mắn thay, điều này sẽ không ảnh hưởng đến tính toán của bạn cho mô-men xoắn. Tuy nhiên, nó sẽ ảnh hưởng đến tính toán của bạn cho trung tâm của sự dịch chuyển khối lượng. Tôi không chắc liệu bạn có quan tâm đến độ chính xác ở mức đó hay không, vì "tâm khối lượng" của bạn ít nhất là hình vuông gần nhất với tâm khối lượng thực sự.
Thứ ba, nếu bạn muốn tính toán một bộ đẩy nhất định sẽ ảnh hưởng đến vòng quay như thế nào, bạn có quyền, mặc dù bạn đang sử dụng một công thức không hiệu quả. Mô-men xoắn có thể được tính là r x F
, có độ lớn r*F*sin(theta)
. Tuy nhiên, tính toán các góc trong trường hợp này là một phương pháp không hiệu quả. Thay vào đó, bạn nên sử dụng trực tiếp định nghĩa sản phẩm chéo của mô-men xoắn, vì điều này sẽ đơn giản hơn nhiều khi sử dụng các đại diện bạn có. Bởi vì tất cả các vectơ của bạn không có thành phần z, công thức cho sản phẩm chéo đơn giản hóa rất nhiều.
Không thay đổi kết quả tính toán của bạn, chúng tôi chỉ có thể cập nhật mã của bạn
private function thrustTorque():Float
{
var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
return torque;
}
Điều đó đẹp hơn nhiều (và nhanh hơn).
Bạn đề nghị trong câu trả lời của riêng bạn rằng giải pháp của bạn là bắn tất cả các bộ đẩy với mô-men xoắn đúng hướng. Bây giờ, điều đó khá nhiều giải quyết câu hỏi mà bạn đã hỏi. Tuy nhiên, tôi hy vọng rằng một số điểm dọc theo đường, bạn sẽ thấy rằng chiến lược của mình không thỏa đáng, nếu người dùng nhấn nút "xoay" và tất cả các bộ đẩy có mô-men xoắn dương, có khả năng di chuyển chúng lên trên về việc xoay chúng (Tôi không chắc về mức độ chi tiết của mô phỏng của bạn, nếu bạn thực sự tính toán các lực từ các bộ đẩy, hoặc nếu bạn chỉ hiển thị trực quan chúng bắn và sau đó xoay mô hình của bạn với gia tốc liên tục hoặc một cái gì đó. cách này, bạn muốn các máy đẩy được bắn ít nhất là chính xác).
Bạn không xem xét lực lượng ròng trên tàu. Nếu bạn có số lượng đẩy tùy ý, thì điều này có thể biến thành một vấn đề khá phức tạp. Tuy nhiên, vì các bộ đẩy của chúng tôi chỉ có hai trạng thái, nên việc phân tích khá đơn giản. Tôi không chắc chính xác mục tiêu của chúng tôi là gì, vì vậy tôi có thể tưởng tượng ra hai mục tiêu khác nhau: thứ nhất, chúng tôi muốn giảm thiểu tổng lực, trong khi vẫn giữ mô-men xoắn theo hướng chúng tôi muốn. Thứ hai, chúng tôi muốn tối đa hóa tỷ lệ mô-men xoắn trên tổng lực.
Bên cạnh đó, nếu bạn có thể tưởng tượng một điều khiển "khối lượng đẩy" bổ sung ảnh hưởng đến sức mạnh của tất cả các bộ đẩy, thì bạn có thể đặt điều khiển này để hai giải pháp của bạn có mô-men xoắn bằng nhau và bạn thấy rằng giải pháp thứ hai chỉ có thể có một chuyển vị nhỏ hơn đầu tiên. Tuy nhiên, chúng ta cần nhớ rằng nếu có thể bắn các bộ đẩy để bạn chỉ xoay và không di chuyển chút nào, thì cả hai giải pháp sẽ giống nhau.
Vì vậy, chúng ta sẽ đi với giải pháp thứ hai, dựa trên các đối số của đoạn trước. Bây giờ, khi phân tích tổng lực, chúng ta có thể chỉ cần lưu ý rằng chỉ có bốn hướng mà động cơ có thể chỉ ra. Do đó, tổng lực theo hướng x chỉ là số lượng bộ đẩy hướng trái trừ số chỉ về bên phải và tương tự cho hướng y.
Sau khi viết đến nay, tôi phải suy nghĩ thêm về thuật toán để tối ưu hóa nó. Tôi nghĩ phần còn lại của bài viết của tôi cũng hữu ích, vì vậy tôi sẽ đăng nó, nhưng tôi sẽ cập nhật khi tôi tìm ra cách tốt nhất để tối ưu hóa cấu hình này (Tôi đã nghĩ ra một vài cách để có câu trả lời gần đúng, nhưng không ai trong số họ là chính xác).