Tôi đã có bot trong một hình chữ nhật với các hàng và cột. Một vấn đề phát sinh khi một bot được thêm hoặc xóa khỏi đội hình. Khi điều này xảy ra, các bot phải tự sắp xếp lại sao cho hình dạng hình chữ nhật vẫn có cùng tỷ lệ khung hình và càng hình chữ nhật càng tốt. làm như thế nào?
Một vài ý tưởng:
Khi một bot được thêm hoặc xóa, hãy sử dụng tổng số bot mới và tỷ lệ khung hình không đổi mong muốn để tính chiều rộng và chiều cao mới của đội hình phù hợp nhất với tỷ lệ khung hình đó. Sau đó bằng cách nào đó cải tổ các bot để phù hợp với kích thước mới.
Khi một bot bị loại bỏ, di chuyển bot phía sau nó vào vị trí của nó và tiếp tục cho đến khi bạn đạt đến cuối của đội hình. Sau đó, thậm chí xếp hạng trở lại càng nhiều càng tốt bằng cách bằng cách nào đó xáo trộn các bot trong xếp hạng trở lại.
Một ý tưởng khác hoàn toàn khác là bắt chước cách các cấu trúc phân tử ở lại với nhau. Làm cho mọi bot muốn được bao quanh bởi bốn bot khác bằng cách thu hút bốn bot gần nhất và đẩy lùi phần còn lại. Đẩy lùi tất cả các bot (bao gồm cả bốn) quá gần để đảm bảo phân tách bằng luật bình phương nghịch đảo. Bạn cũng cần một lực bổ sung để định hình toàn bộ cấu trúc. Nhưng, điều này nghe có vẻ rất đắt tiền.
CẬP NHẬT : Vì vậy, nhìn vào câu trả lời của sarahm, tôi đã đưa ra một chức năng chung tốt mang lại kích thước tốt.
Đầu tiên tôi giải phương trình đồng thời dưới đây cho chiều rộng và chiều cao, sau đó làm tròn các câu trả lời.
width/height=aspect ratio of your choice
width*height=number of bots
Điều này cung cấp cho bạn hình chữ nhật số nguyên gần nhất với tỷ lệ khung hình đó cho số lượng bot của bạn. Hình chữ nhật gần nhất sẽ là một nửa thời gian là quá lớn và một nửa thời gian là quá nhỏ (tất nhiên đôi khi nó sẽ vừa phải nhưng ai quan tâm đến những điều đó). Trong trường hợp hình chữ nhật là một chút quá lớn, nhu cầu gì để được thực hiện. Thứ hạng trở lại sẽ chỉ là gần đầy, đó là lý tưởng. Trong trường hợp hình chữ nhật là một chút quá nhỏ, bạn có vấn đề, vì đó teeny tràn nhỏ sẽ phải đi đến cấp bậc riêng của nó tạo ra một cấp bậc chỉ với một vài chương trình trên đó, mà không trông khá. Cũng có trường hợp chênh lệch lớn(lớn hơn một nửa chiều rộng), trong trường hợp đó cộng hoặc trừ một cấp bậc để tạo sự khác biệt nhỏ. Sau đó, khi hình chữ nhật quá nhỏ, thêm một cột để làm cho nó chỉ lớn hơn một chút. Sau khi làm điều đó, có vẻ như thứ hạng trở lại sẽ luôn có ít nhất một nửa số bot như các thứ hạng khác.
CẬP NHẬT
Khi bạn đã có kích thước, hãy so sánh chúng với kích thước hiện tại. Nếu mặt tiền của kích thước mới lớn hơn, đối với mọi cấp bậc, các bot pop từ thứ hạng bên dưới và đẩy chúng lên thứ hạng hiện tại cho đến khi số lượng bot trên thứ hạng đó bằng với mặt tiền. Tiếp tục thuật toán đó cho đến khi bạn đạt được thứ hạng trở lại. Sử dụng thuật toán này, các bot sẽ di chuyển để phù hợp với chiều mới một cách hiệu quả. Sau đó, tôi chỉ đơn giản là đẩy cái cũ mới lên thứ hạng trở lại. Thuật toán hơi khác nhau đối với các trường hợp mặt tiền mới nhỏ hơn, nhưng bạn có thể tìm ra nó!
Có hai vấn đề tiếp theo. Xóa và một phương pháp bổ sung linh hoạt hơn trong đó các bot mới không nhất thiết phải được gán cho thứ hạng trở lại nhưng bất kỳ vị trí nào gần với chúng nhất tại thời điểm chúng được thêm vào.