Вычислите координаты вершин правильного многоугольника

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
28
задан Nobody 8 August 2010 в 23:19
поделиться

4 ответа

for (i = 0; i < n; i++) {
  printf("%f %f\n",r * Math.cos(2 * Math.PI * i / n), r * Math.sin(2 * Math.PI * i / n));
}

где r - радиус окружающего круга. Извините за неправильный язык Нет Habla C #.

Обычно угол между любыми двумя вершинами равен 2 pi / n , и все вершины находятся на расстоянии r от начала координат.

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы центр был где-то еще, а не в начале координат, скажем, в (x, y)

for (i = 0; i < n; i++) {
  printf("%f %f\n",x + r * Math.cos(2 * Math.PI * i / n), y + r * Math.sin(2 * Math.PI * i / n));
}
55
ответ дан 28 November 2019 в 02:35
поделиться

Скажем, расстояние вершин до начала координат равно 1. И скажем, (1, 0) всегда является координатой многоугольника.

Учитывая количество вершин (скажем, n), угол поворота, необходимый для позиционирования (1, 0) к следующей координате, будет (360 / n).

Требуемое здесь вычисление - вращение координат. Вот что это такое; Матрица вращения .

Скажите, что тета = 360 / n;

[cos(theta) -sin(theta)]
[sin(theta) cos(theta)]

будет вашей матрицей вращения.

Если вы знаете линейную алгебру, вы уже знаете, что я имею в виду. Если не просто взглянуть на Умножение матриц

2
ответ дан tafa 28 November 2019 в 02:35
поделиться

Извините, у меня сейчас нет полного решения под рукой, но Вам следует попробовать поискать 2D-рендеринг кругов. Все классические реализации круга (x, y, r) используют многоугольник, как вы описали для рисования (но с более чем 50 сторонами).

2
ответ дан 28 November 2019 в 02:35
поделиться

Количество точек равно количеству сторон.

Требуемый угол равен angle = 2 * pi / numPoints .

Затем начните вертикально над исходной точкой с размером многоугольника, задаваемым radius :

for (int i = 0; i < numPoints; i++)
{
    x = centreX + radius * sin(i * angle);
    y = centreY + radius * cos(i * angle);
}

Если ваш центр является исходной точкой, просто игнорируйте centreX и centreY как они будут 0,0.

Если поменять местами cos и sin , первая точка будет указывать горизонтально вправо от начала координат.

21
ответ дан 28 November 2019 в 02:35
поделиться
Другие вопросы по тегам:

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