D1mar1k
@D1mar1k
Сделано с любовью и JavaScript

Как расположить элементы по кругу?

Нужно в зависимости от кол-ва приходящих данных мапить элементы по данной схеме:

1 - если 1 элемент, отображать в верхней точки круга (круг условный отображаться не будет)
5eda28512c41b234313656.png

2 - последующие элементы отображаются по кругу с равным отступом друг от друга:
5eda2997af3e2436524295.png
5eda29a1bf3ce618030372.png

3 - нужно задать константу минимального отступа между элементами. Если следующий элемент "не помещается", нужно создать следующую окружность с радиусом R2= R1*2 и повторять предыдущие действия по добавлению элементов.
5eda2ad33c450101082684.png

Вопрос: как расположить элементы по окружности?
Как высчитать расстояние по окружности и тд я знаю, не понимаю как расположить
  • Вопрос задан
  • 1786 просмотров
Решения вопроса 1
D1mar1k
@D1mar1k Автор вопроса
Сделано с любовью и JavaScript
Давно не заходил, решил так:

const calculateCoordinate = (count, r, cx, cy) => {
    const sectors = [];
    let startAngle = -90;
    let endAngle = 0;
    let maxCard = 6;
    for (let i=0; i<count; i++)  {
        if (i<=maxCard-1){
            const angle = 360/maxCard;
            endAngle += angle;
            const rad = Math.PI / 180;
            const x = cx + r * Math.cos(startAngle * rad);
            const y = cy + r * Math.sin(startAngle * rad);
            startAngle += angle;
            sectors.push({x, y});
        } else {
            const angle = 360/(count-maxCard);
            endAngle += angle;
            const rad = Math.PI / 180;
            const x = cx + r * 2 * Math.cos(startAngle * rad);
            const y = cy + r * 2 * Math.sin(startAngle * rad);
            startAngle += angle;
            sectors.push({x, y});
        }
    }
    return sectors;
};


При реализации учитывал максимальное кол-во фишек - 20шт. Максимальное кол-во радиусов - 2
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Можно сделать так. Для каждого квадрата высчитывать только угол поворота.
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы