Найти вершины правильного многоугольника - PullRequest
0 голосов
/ 21 июня 2011

У меня есть некоторые свойства, определенные пользователем, и затем я хочу использовать их для автоматической генерации правильного многоугольника. Свойства: центр x, центр y, радиус и количество вершин. Я хотел бы знать, как рассчитать координаты х и у всех вершин правильного многоугольника. Я уже пытался сделать как Рассчитать координаты вершин правильного многоугольника обсуждение. Но это всегда дает мне неправильные координаты. Мой текущий код выглядит следующим образом (C ++):

#define DOUBLE(a) ((a)*(a))

...

if(radius <= 0 || vertices < 3)
  return NULL;

Polygon* poly = new Polygon;

double angle = DOUBLE(M_PI) / vertices;

for(long i = 0; i < vertices; i++)
{
  double a = (angle * i);

  poly->add(centerX + radius * cos(a), centerY + radius * sin(a));
}

return poly;

Ответы [ 2 ]

8 голосов
/ 21 июня 2011

Ошибка в расчете угла.

Угол между каждой вершиной должен быть 2 * M_PI / vertices.

Очевидно, ваш макрос:

#define DOUBLE(a) ((a)*(a))

неверен.

Однако в C ++ вам все равно не следует использовать макросы для таких тривиальных операций - в большинстве случаев это должна быть inline функция или просто прямая формула, приведенная выше.

1 голос
/ 21 июня 2011

Попробуйте

#define DOUBLE(a) ((a) + (a))

или

#define DOUBLE(a) (2 * (a))

Вы определяете SQUARE (a) под ложным тождеством.

...