Предположим мне нужны координаты 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;
Комментариев нет:
Отправить комментарий