PragmaGames
@PragmaGames
Увлекаюсь Unity.

Как равномерно разместить N юнитов на окружности?

Имеется центральный объект "Офицер", вокруг него двигаются "Солдаты". Солдаты должны размещаться равномерно и на одинаково удаленном расстоянии вокруг "Офицера" образуя окружность. Если солдат становится слишком много что бы уместиться в эту окружность она расширяется. Изначально имеется дефолтный радиус данной окружности и 3 солдата. Как рассчитывать в каких точках этой окружности они должны располагаться ? Насколько я понимаю для 3 солдат это должны быть вершины вписанного равностороннего треугольника
public class OfficerComponent : MonoBehaviour
    {
        private Transform _collectionСenter;
        private float _radiusCollection;
        private List<Vector3> _locationPoints;
        
        private LinkedList<SolderLogicComponent> _solderLogicComponents;

        private void Awake()
        {
            _locationPoints = new List<Vector3>();
        }

        public void Init(Transform collectionСenter, float radiusCollection)
        {
            _collectionСenter = collectionСenter;
            _radiusCollection = radiusCollection;
        }

        private void RecalculationLocationPoints()
        {
            var countSection = _solderLogicComponents.Count;
        }

        private void DistributeTargetLocation()
        {
            var index = 0;
            
            for (var node = _solderLogicComponents.First; node != null; node = node.Next)
            {
                node.Value.TargetLocationPoint = _locationPoints[index];
                index++;
            }
        }

        public void AddSolder(SolderLogicComponent solderLogicComponent)
        {
            _solderLogicComponents.AddLast(solderLogicComponent);
            RecalculationLocationPoints();
            DistributeTargetLocation();
        }

        public void RemoveSolder(SolderLogicComponent solderLogicComponent)
        {
            _solderLogicComponents.Remove(solderLogicComponent);
            RecalculationLocationPoints();
            DistributeTargetLocation();
        }
    }
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
В полярной системе координат их позиции вычислить элементарно: у i-того солдата угол 2pi*i/n и радус фиксированный.

Для перехода из полярной системы координат в обычную воспользуйтесь тригонометрическими функциями:
x_i = x_o+cos(alpha_i)*r_i
y_i = y_o+sin(alpha_i)*r_i
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы