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

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

12.04.2016, 08:12. Показов 5441. Ответов 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
1224 / 410 / 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
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
12.04.2016, 09:54
Цитата Сообщение от Sergey1 Посмотреть сообщение
в круге радиуса R
А точки строго на окружности - они в круге или нет?
0
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
12.04.2016, 10:06  [ТС]
Точки и на окружности и на границе
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
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
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
15.04.2016, 20:25
Цитата Сообщение от Sergey1 Посмотреть сообщение
Расскажи алгоритм твоей программы??
Какой именно? Функция DumbCircleCounter - это и есть именно ваше "методом перебора : если длина от центра до точки меньше либо равно радиусу, то точка принадлежит".
0
0 / 0 / 0
Регистрация: 13.12.2015
Сообщений: 11
16.04.2016, 00:25  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Какой именно?
второй
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
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
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru