Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11

Написать программу: нахождение числа точек в заданном круге

12.04.2016, 08:12. Показов 5520. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, нужно написать программу которая вычисляет количество точек с целочисленными координатами в круге радиуса R с центром в точке A (x0,y0). Координаты центра круга и радиус вводятся пользователем. Заранее спасибо)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2016, 08:12
Ответы с готовыми решениями:

С помощью оператора FOR : написать программу, которая выводит все парные числа на заданном отрезке
2. С помощью оператора FOR : написать программу, которая выводит все парные числа на заданном отрезке (вводится с клавиатуры)

Написать программу перечисления точек заданного множества точек на плоскости в соотвествии с этим порядком.
На плоскости задано n точек с целочислительными координатами (n<=100). Порядок на точках плоскости определим так: (x,y)<=(u,v), если...

Написать программу, определяющую номера точек, расположенных ближе всего друг к другу, среди n заданных точек
Помогите решить, курсач горит! Напи¬сать программу, определяющую номера точек, расположенных ближе всего друг к другу, среди n...

15
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
12.04.2016, 08:17
Элементарно - возвращает 0 (точек-то нет)
0
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
12.04.2016, 08:19  [ТС]
Почему нет?
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
12.04.2016, 08:30
Посмотрите 1е сообщение. Где там точки?
0
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
12.04.2016, 08:43  [ТС]
В круге с радиусом R
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
12.04.2016, 09:23
C++
1
if (sqrt((x - x0) * (x - x0) + (y - y0) * (y - y0)) <= R)
0
Объявлятель переменных
 Аватар для SpBerkut
1225 / 411 / 321
Регистрация: 24.09.2011
Сообщений: 1,279
12.04.2016, 09:33
C++
1
2
3
4
5
6
7
8
9
#include <cmath>
 
struct point {int x,y;};
 
unsigned int getNumerOfPoint(point *P, unsigned int N, unsigned int R) {
    unsigned int res=0;
    for (unsigned int i = 1; i<N; res+=(hypot(P[i].x-P[0].x, P[i].y-P[0].y)<=R), i++);
    return res;
}
Дальше сами.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
12.04.2016, 09:54
Цитата Сообщение от Sergey1 Посмотреть сообщение
в круге радиуса R
А точки строго на окружности - они в круге или нет?
0
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
12.04.2016, 10:06  [ТС]
Точки и на окружности и на границе
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
13.04.2016, 00:37
Лучший ответ Сообщение было отмечено Sergey1 как решение

Решение

Цитата Сообщение от Sergey1 Посмотреть сообщение
Координаты центра круга и радиус вводятся пользователем.
Так а координаты центра круга целочисленны или нет? А радиус?

Если координаты центра целочисленны, то к чему они здесь вообще? Количество целочисленных точек в круге никак не зависит от координат его центра.

--------

В общем, для целочисленного радиуса и центра берем алгоритм Брезенхэма для генерации растрового представления окружности и вместо рисования окружности аккуратно считаем количество попавших внутрь узлов сетки.

Например, на основе варианта, известного как алгоритм Мичнера для генерации 1/8 окружности

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
unsigned MichenerCircleCounter(int radius)
{
  int radius2 = radius * radius;
 
  int x = radius, y = 0;
  int d = 1 - radius;
 
  unsigned count = 0;
 
  while (x >= y)
  {
    bool is_inside = x * x + y * y <= radius2;
    unsigned add = (x - y + is_inside) * 2;
    if (add > 0)
      count += add - 1;
 
    d += d <= 0 ? 2 * ++y + 1 : 2 * (++y - --x) + 1;
  }
 
  count -= radius + 1;
  count *= 4;
  count += 1;
 
  return count;
}
За такой вариант вас, разумеется, быстро выведут на чистую воду и пошлют на сельхозработы. Поэтому, на всякий случай, вариант с тупым перебором всех точек

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unsigned DumbCircleCounter(int radius)
{
  int radius2 = radius * radius;
 
  unsigned count = 0;
 
  for (int y = -radius; y <= radius; ++y)
    for (int x = -radius; x <= radius; ++x)
    {
      bool is_inside = x * x + y * y <= radius2;
      count += is_inside;
    }
 
  return count;
}
Хотя на сельхозработы надо, конечно, посылать именно за этот второй вариант.

http://coliru.stacked-crooked.... cd74478e4a

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
R = 1 - Count = 5 5
R = 2 - Count = 13 13
R = 3 - Count = 29 29
R = 4 - Count = 49 49
R = 5 - Count = 81 81
R = 6 - Count = 113 113
R = 7 - Count = 149 149
R = 8 - Count = 197 197
R = 9 - Count = 253 253
R = 10 - Count = 317 317
R = 11 - Count = 377 377
R = 12 - Count = 441 441
R = 13 - Count = 529 529
R = 14 - Count = 613 613
R = 15 - Count = 709 709
R = 16 - Count = 797 797
R = 17 - Count = 901 901
R = 18 - Count = 1009 1009
R = 19 - Count = 1129 1129
R = 20 - Count = 1257 1257
R = 21 - Count = 1373 1373
R = 22 - Count = 1517 1517
R = 23 - Count = 1653 1653
R = 24 - Count = 1793 1793
R = 25 - Count = 1961 1961
R = 26 - Count = 2121 2121
R = 27 - Count = 2289 2289
R = 28 - Count = 2453 2453
R = 29 - Count = 2629 2629
R = 30 - Count = 2821 2821
R = 31 - Count = 3001 3001
R = 32 - Count = 3209 3209
R = 33 - Count = 3409 3409
R = 34 - Count = 3625 3625
R = 35 - Count = 3853 3853
R = 36 - Count = 4053 4053
R = 37 - Count = 4293 4293
R = 38 - Count = 4513 4513
R = 39 - Count = 4777 4777
R = 40 - Count = 5025 5025
3
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
15.04.2016, 15:51  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а координаты центра круга целочисленны или нет? А радиус?
Если координаты центра целочисленны, то к чему они здесь вообще? Количество целочисленных точек в круге никак не зависит от координат его центра.
фишка в том чтоб координаты центра вводились пользователем... Я тоже не пойму зачем они. Пробовал написать программу методом перебора : если длина от центра до точки меньше либо равно радиусу, то точка принадлежит..

Расскажи алгоритм твоей программы??

Добавлено через 51 секунду
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а координаты центра круга целочисленны или нет? А радиус?
Без разницы
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
15.04.2016, 20:25
Цитата Сообщение от Sergey1 Посмотреть сообщение
Расскажи алгоритм твоей программы??
Какой именно? Функция DumbCircleCounter - это и есть именно ваше "методом перебора : если длина от центра до точки меньше либо равно радиусу, то точка принадлежит".
0
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
16.04.2016, 00:25  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Какой именно?
второй
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
16.04.2016, 00:36
Цитата Сообщение от Sergey1 Посмотреть сообщение
второй
Второй алгоритм вы уже сами прекрасно рассказали: для окружности радиуса R перебираем все целочисленные точки в квадрате [-R, -R]-[+R, +R] и если расстояние от точки до начала координат меньше либо равно радиусу, то точка принадлежит.
1
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
16.04.2016, 00:47  [ТС]
спасибо большое)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
16.08.2018, 21:44
Кстати, решение этой задачи (известной также, как задача Гаусса) можно найти и по предложенной Гауссом формуле

Code
1
A(n) = 1 + 4 * ([n/1] - [n/3] + [n/5] - [n/7] + ...)
где n - это квадрат радиуса круга.

https://oeis.org/A000328
https://oeis.org/A057655
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2018, 21:44
Помогаю со студенческими работами здесь

Нахождение числа в заданном промежутке
Всем привет! Изучаю курсы Java на одном сайте и столкнулся с таким вопросом. Есть следующее задание: Нужно определить попадает ли...

Количество точек в круге
Вычислить количество к-точек с целочисленными координатами которые принадлежат кругу радиусом R (R&gt;0) с центром в начале координат....

Количество точек в круге
Дано случайное количество точек. Радиус круга задается вручную. Как узнать общее количество точек, которые попали в круг? вот...

Количество точек с целыми координатами в круге
Есть задача: Фермер Иван с юности следит за своим газоном. Газон можно считать плоскостью, на которой в каждой точке с целыми...

Вычислить, сколько точек находится в круге радиусом r
Три точки заданы на плоскости своими координатами. Помогите, пожалуйста, вычислить, сколько точек находится в круге радиусом r с центром в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru