#c_sharp
Предположим мне нужны координаты 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-ти точкам?
Ответы
Ответ 1
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;Ответ 2
int r = 5; for(int i = 0 ; i < 360; i++) { double rad = (double)i / 180 * 3.14; double x = r * cos(rad); double y = r * sin(rad); qDebug() << "X:" << x << " Y:" << y << " Rad:" << rad; } это решение на qt c++, так как visual studio нет под рукой. К получившимся x,y добавляется значение смещения центра. r - радиус окружности Вывод примерно такой: X: 5 Y: 0 Rad: 0 X: 4.99924 Y: 0.0872178 Rad: 0.0174444 X: 4.99696 Y: 0.174409 Rad: 0.0348889 X: 4.99315 Y: 0.261547 Rad: 0.0523333 X: 4.98783 Y: 0.348606 Rad: 0.0697778 X: 4.98099 Y: 0.435558 Rad: 0.0872222 X: 4.97264 Y: 0.522378 Rad: 0.104667 X: 4.96277 Y: 0.609039 Rad: 0.122111 X: 4.95139 Y: 0.695515 Rad: 0.139556 X: 4.9385 Y: 0.781779 Rad: 0.157 X: 4.92412 Y: 0.867805 Rad: 0.174444 ....
Комментариев нет:
Отправить комментарий