행과 열이있는 직사각형 형태의 봇이 있습니다. 봇이 대형에서 추가되거나 제거 될 때 문제가 발생합니다. 이 경우, 봇은 직사각형 구성이 여전히 대략 동일한 종횡비이고 가능한 한 직사각형이되도록 스스로 재 배열해야 합니다. 이것을하는 방법?
몇 가지 아이디어 :
봇을 추가하거나 제거 할 때 새로운 총 봇 수와 원하는 일정한 종횡비를 사용하여 해당 종횡비에 가장 잘 맞는 포메이션의 새로운 너비와 높이를 계산하십시오. 그런 다음 새로운 치수에 맞게 봇을 다시 섞습니다.
봇이 제거되면, 그 뒤에 있던 봇을 그 자리로 옮기고 포메이션이 끝날 때까지 계속하십시오. 그런 다음 어떻게 든 랭크를 봇을 뒤섞음으로써 가능한 한 랭크를냅니다.
완전히 다른 또 다른 아이디어는 분자 구조가 함께 머무르는 방식을 모방하는 것입니다. 가장 가까운 4 개의 봇을 끌어 들여 나머지 봇을 물리 치면 모든 봇을 다른 4 개의 봇으로 둘러싸고 싶어집니다. 역 제곱 법을 사용하여 분리하기에 너무 가까운 모든 봇 (4 개 포함)을 격퇴하십시오. 전체 구조를 형성하려면 추가 힘이 필요합니다. 그러나 이것은 계산 비용이 매우 많이 들립니다.
업데이트 : 그래서 sarahm의 대답을 살펴보면 좋은 치수를 제공하는 좋은 일반 기능을 생각해 냈습니다.
먼저 너비와 높이에 대한 아래의 동시 방정식을 풀고 답을 반올림했습니다.
width/height=aspect ratio of your choice
width*height=number of bots
이것은 봇 수에 대한 종횡비에 가장 가까운 정수 사각형을 제공합니다. 가장 가까운 사각형은 절반의 시간이 너무 길고 절반의 시간이 너무 작을 것입니다 (물론 때때로 옳을 지 모르지만 누가 신경 쓰는가). 사각형이있는 경우에 약간 너무 큰, 아무것도 요구 할 수 있습니다. 후순위는 거의 가득 차서 이상적입니다. 사각형이있는 경우에는 약간의 그 조그마한 작은 오버 플로우가 자신의 순위가 꽤 보이지 않는 거기에 몇 봇으로 순위를 생성에 가야하기 때문에 너무 작은, 당신은 문제를 얻었다. 차이가 큰 경우도 있습니다(폭의 절반보다 큼),이 경우 차이를 작게 만들기 위해 한 순위를 더하거나 뺍니다. 그런 다음 사각형이 너무 작 으면 열을 하나 더 추가하여 조금 더 크게 만드십시오. 이 것을 수행 한 후 보이는 뒷면 순위는 항상 적어도 것 같은 반 다른 계급 많은 봇있다.
최신 정보
치수를 얻은 후에는 현재 치수와 비교하십시오. 새로운 차원의 경계가 더 클 경우, 모든 순위에 대해 아래 순위에서 봇을 팝하고 해당 순위의 봇 수가 정면과 같을 때까지 현재 순위로 밉니다. 당신이 역 순위에 도달 할 때까지 해당 알고리즘을 계속하십시오. 이 알고리즘을 사용하면 봇이 새로운 차원에 효율적으로 맞출 수 있습니다. 그 후, 나는 단순히 새로운 오래된 것을 백 랭크로 밀어 넣습니다. 새로운 경계가 작은 경우 알고리즘이 약간 다르지만 알아낼 수 있습니다!
다음에는 두 가지 문제가 더 있습니다. 새로운 봇이 반드시 백 랭크에 할당 될 필요는 없지만 추가되는 순간 가장 가까운 위치에 배치되는 삭제 및보다 유연한 추가 방법.