@Mark321

Как расположить точки на окружности?

Добрый день, ребят, признаюсь честно, зря я геометрию в школе прогуливал
помогите пожалуйста
Есть окружность (изначально размер неизвестен)
Есть количество точек(от 2ух до 6, в том числе нечетные)
Задача расположить на окружности точки на равномерном расстоянии друг от друга
https://codesandbox.io/s/t1ry9
Как тут, только тут захаркожено
Не обязательно решение, хотя бы подсказки, как это посчитать
  • Вопрос задан
  • 904 просмотра
Решения вопроса 1
Okujava-script
@Okujava-script
Веб-программист с абсолютным слухом и композитор
Этот пример не затрагивает CSS, а реализован только на JS. Так как углы на JS измеряются в радианах, а длина окружности равна количеству радиан, равному числу пи * 2, (приблизительно 6.28, это количество радиусов из которых состоит окружность) организовываем цикл от нуля до пи * 2. А вот шаг итераций задаём поделив 6.28 на количество точек, которое нам нужно равномерно расставить на окружности.
<canvas id=canvas width=200 height=200></canvas>
let r = 90; // радиус
let amountOfPoints = 7; // количество точек
let x, y;
let ctx = canvas.getContext('2d');
for(i = 0; i < Math.PI * 2; i += Math.PI * 2 / amountOfPoints){
	x = canvas.width / 2 + r * Math.sin(i);
	y = canvas.height / 2 + r * Math.cos(i);
	ctx.fillRect(x, y, 2, 2);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Не уверен, но мне кажется, что здесь то, что тебе нужно https://ru.stackoverflow.com/questions/791246/%D0%...
Ответ написан
Комментировать
@alexalexes
В вашем примере используется карусель, у которой прописаны стартовое положение:
state = {
    carouselDeg: 17,
    itemDeg: -17,

carouselDeg - поворот элементов основной окружности в градусах. Опытным путем можно понять, что оно задается как:
(360 / кол-во элементов) / 2
Элементов у вас 10, значит, должно быть 18 градусов, а не 17 (можно заметить, что с 17 неровное начальное смещение).
itemDeg - вращение контента внутри одного элемента. Если хотите, чтобы контент всегда был обращен горизонтально, то берете ту же формулу со знаком минус.
Далее, есть такие методы:
next = () => {
    this.getIdItems(true);
    this.setState(state => ({
      carouselDeg: state.carouselDeg - 36,
      itemDeg: state.itemDeg + 36
    }));
  };

  prev = () => {
    this.getIdItems(false);
    this.setState(state => ({
      carouselDeg: state.carouselDeg + 36,
      itemDeg: state.itemDeg - 36
    }));
  };

Число 36 - это шаг вращения, он вычисляется как:
360 / кол-во элементов
В принципе все, что нужно знать для правильной ориентации карусели.
Прорисовкой элементов карусели занимается сама библиотека, позиции элементов на плоскости вам вычислять не нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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