Страницы

Поиск по вопросам

четверг, 2 мая 2019 г.

Как вычислить координаты всех точек лежащих на окружности


Предположим мне нужны координаты 360 точек на окружности, по одной на каждый градус поворота
Есть предположение:
int x = (int)Math.Cos(2 * Math.PI * i / n) * R + x[0]; int y = (int)Math.Sin(2 * Math.PI * i / n) * R + y[0];
Где i - номер точки, n - кол-во точек = 360, R - радиус, x[0] и y[0] - координаты центра окружности
Вот только таким способом вычисляются только эти четыре точки:

Как пройтись по всем 360-ти точкам?


Ответ

int x = (int)Math.Cos(2 * Math.PI * i / n) * R + x[0]; int y = (int)Math.Sin(2 * Math.PI * i / n) * R + y[0];
Я предполагаю, что нужны именно целочисленные координаты. В таком случае следует выполнять округление после умножения на радиус.
int x = (int)(Math.Cos(2 * Math.PI * i / n) * R + 0.5) + x0; int y = (int)(Math.Sin(2 * Math.PI * i / n) * R + 0.5) + y0;
Это по-прежнему не гарантирует, что получатся все 360 точек, но теперь их не всегда будет 4.
http://ideone.com/fxzB8V
4 of 360 when radius is 1 76 of 360 when radius is 10 140 of 360 when radius is 20 268 of 360 when radius is 40 356 of 360 when radius is 80 360 of 360 when radius is 90 360 of 360 when radius is 100
Если же целочисленные координаты не требуются, то вместо int следует использовать double:
double x = Math.Cos(2 * Math.PI * i / n) * R + x0; double y = Math.Sin(2 * Math.PI * i / n) * R + y0;

Комментариев нет:

Отправить комментарий