Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
RAFA91
Заблокирован
#1

Надо проверить какие квадраты влезли в круг а какие нет - C++

03.09.2016, 15:02. Просмотров 274. Ответов 12
Метки нет (Все метки)

Есть круг с центром в a = 150, b = 150 радиус R*R = 1800,

стороны квадратов 10.

Координаты нижнего левого угла квадрата с индексом 0, 0 (100,100)

Координаты верхнего правого угла квадрата с индексом 9, 9 (200,200)

Надо проверить какие квадраты влезли в круг а какие нет

Предложите пожалуйста вариант решения , но не этот

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
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <cmath>
using namespace std;
 
int main() 
{
    int RR = 1800, a = 150, b = 150,  count = 0;
    
 
    
    for (int i=0, y = 100;i<10;i++,y+=10)
    {
        
        for (int j=0,x = 100;j<10;j++,x+=10)
        {
            
            
            count = 0;
        
            if (pow((x - a),2) + pow((y - b),2) <= RR) count++;
            
            if (pow((x + 10 - a),2) + pow((y - b),2) <= RR) count++;
            
            if (pow((x - a),2) + pow((y + 10 - b),2) <= RR) count++;
            
            if (pow((x + 10 - a),2) + pow((y + 10 - b),2) <= RR) count++;
            
            if (count == 4) cout<<"Квадрат ("<<i<<","<<j<<") влез."<<endl;
            
            else cout<<"Квадрат ("<<i<<","<<j<<") не влез !!!"<<endl;
            
            
        }
    }
    return 0;
}
0
Миниатюры
Надо проверить какие квадраты влезли в круг а какие нет  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2016, 15:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Надо проверить какие квадраты влезли в круг а какие нет (C++):

Проверить какие круги влезли в круг, а какие нет
Есть круг с центром в a = 145, b = 145 радиус R = 43, радиусы малых кругов...

Узнать, какие разряды включены в число, а какие нет
Помогите разобраться.Это все надо на Си. Значение int 4 байта т.е 32...

Выяснить, какие из прямых параллельны, а какие - нет
Помогите пожалуйста с программой в dev c++. Условие: Даны уравнения прямых...

Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе
Для каждого из четырех классов указаны имена девочек, обучающихся в них....

Какие блоки кода надо знать и помнить?
Я решал задачу и не мог придумать алгоритм вычисления НОД(часа 2 думал как это...

после Кернигана и Ритчи какие книжки надо читать ???
Керниган и Ритчи Язык программирование Си! Еще такой глупый вопрос :) Почему...

12
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
03.09.2016, 15:15 #2
RAFA91, если они находятся в одной точке то достаточно проверить чтобы совпали их "радиусы", в вашем случае(на рисунке) если радуис круга больше или равен растоянию от центра квадрата до любого из его углов то он внутри

Добавлено через 3 минуты
ну если в формулах то так
C++
1
2
3
if(R >= sqrt(powf(x1 - x0, 2) + powf(y1 - y0, 2))) {
    cout << "Вписан";
}
где R радиус круг x0 и y0 обязательно ! координаты центра и круга и квадрата x1, y1 кординаты любого угла квадрата

Добавлено через 3 минуты
RAFA91, в общем случае какой я предлагаю вариант, считать растояние до всех углов квадрата и в случае если они меньше радиуса поидее мы внутри круга
0
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
03.09.2016, 15:16 #3
Если все вершины квадрата лежат внутри окружности, значит весь квадрат лежит внутри окружности.
Вершина лежит внутри окружности, если расстояние от центра окружности до неё меньше, чем радиус окружности.
0
RAFA91
Заблокирован
03.09.2016, 15:29  [ТС] #4
Цитата Сообщение от RAFA91 Посмотреть сообщение
Есть круг с центром в a = 150, b = 150 радиус R*R = 1800,
стороны квадратов 10.
Координаты нижнего левого угла квадрата с индексом 0, 0 (100,100)
Координаты верхнего правого угла квадрата с индексом 9, 9 (200,200)
Надо проверить какие квадраты влезли в круг а какие нет
Предложите пожалуйста вариант решения , но не этот
для тех кто не умеет читать
Цитата Сообщение от obivan Посмотреть сообщение
то достаточно проверить
не убедительно как-то




из 100 квадратов надо выделить только те, которые влезли в круг полностью
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
03.09.2016, 15:50 #5
Цитата Сообщение от RAFA91 Посмотреть сообщение
не убедительно как-то
в каком смысле не убедительно, для квадрата у которого центр совпадает с центром круга это и не должно быть убедительно т.к это аксиома

Добавлено через 16 минут
еще вариант, если радиус круга больше чем растояние от центра круга до центра квадрата + радиус внешней окружности квадрата (до любого угла) то мы тоже внутри
0
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
03.09.2016, 15:58 #6
Цитата Сообщение от RAFA91 Посмотреть сообщение
не убедительно как-то
Не знаю как точно доказать, но если квадрат не находится полностью внутри круга, то обязательно хотя бы один его угол будет торчать вне него. Проводишь отрезки из центра круга к углам квадрата и проверяешь их длину: короче радиуса - угол внутри, длинее - снаружи.
0
RAFA91
Заблокирован
03.09.2016, 16:25  [ТС] #7
из 100 квадратов надо выделить только те, которые влезли в круг полностью
Цитата Сообщение от RAFA91 Посмотреть сообщение
из 100 квадратов надо выделить только те, которые влезли в круг полностью
квадратов 100

у каждого квадрата 4 вершины.

вот и 4 проверки делаем.
C++
1
if(R >= sqrt(powf(x1 - x0, 2) + powf(y1 - y0, 2))) {
это строка дает большую погрешность.

а это нет


C++
1
2
3
4
5
6
7
8
9
10
11
if (pow((x - a),2) + pow((y - b),2) <= RR) count++;
            
            if (pow((x + 10 - a),2) + pow((y - b),2) <= RR) count++;
            
            if (pow((x - a),2) + pow((y + 10 - b),2) <= RR) count++;
            
            if (pow((x + 10 - a),2) + pow((y + 10 - b),2) <= RR) count++;
            
            if (count == 4) cout<<"Квадрат ("<<i<<","<<j<<") влез."<<endl;
            
            else cout<<"Квадрат ("<<i<<","<<j<<") не влез !!!"<<endl;
Цитата Сообщение от obivan Посмотреть сообщение
для квадрата у которого центр совпадает с центром круга это
я этого вообще не говорил. это согласно построению так получилось.

зря я выложил скрин. он всех ввел в заблуждение
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
03.09.2016, 16:40 #8
RAFA91, попробуйте так
C++
1
2
3
4
5
6
7
8
float cx0, cy0, qx0, qy0;//тут условно координаты центра круга и квадрата для ясности
float length = sqrt(powf(qx0 - cx0, 2.0) + powf(qy0 - cy0, 2.0));//тут расстояние между центром окружности
// и центром квадрата
float quadRadius = sqrt(powf(qx1 - qx0, 2.0) + powf(qy1 - qy0, 2.0));//тут радиус внешней окружности квадрата
//qx1, qy1 координаты какого либо угла
if(R > length + quadRadius) {
    //...
}
Добавлено через 46 секунд
для квадрата выходит что просчет идет по нахождению расстояния два раза вместо 4х
0
RAFA91
Заблокирован
03.09.2016, 16:48  [ТС] #9
почему это 2 раза ?
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
03.09.2016, 16:50 #10
RAFA91, потому что для 1го квадрата получается два просчета сначала растояния между центрами а потом до одного угла, предлагался вариант считать растояние от центра до каждого угла, в нем 4 просчета потому что 4 угла
0
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
03.09.2016, 16:51 #11
del
0
obivan
Падаван С++
419 / 239 / 82
Регистрация: 11.11.2014
Сообщений: 842
Завершенные тесты: 2
03.09.2016, 16:54 #12
nonedark2008, я тоже вот думал потому что там поидее может возникнуть погрешность, ну самый надежный вариант это до 4х углов, этот быстрее но с погрешностью

Добавлено через 43 секунды
ну погрешность вплане если внешняя окружность выйдет по радиуса за пределы а квадрат внутри, то посчитает неправильно
0
nonedark2008
1022 / 762 / 210
Регистрация: 28.07.2012
Сообщений: 2,118
03.09.2016, 17:05 #13
Цитата Сообщение от obivan Посмотреть сообщение
этот быстрее но с погрешностью
Не вижу смысла применять эвристику с потерей точности для задачи, которая этого и не требует.
Вот если ТС это потребуется, тогда пожалуйста.
0
03.09.2016, 17:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2016, 17:05
Привет! Вот еще темы с решениями:

Какие 2 сортировки надо знать, чтобы на все случаи жизни быть застрахованным?
Всем добрый вечер! Форум уже давно читаю на правах гостя. Сегодня всерьез...

Задача 56. Выяснить, какие цифры (по одной справа и слева) надо приписать к числу 1022,
Задача 56. Выяснить, какие цифры (по одной справа и слева) надо приписать к...

Какие цифры (по одной справа и слева) надо приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9
Вариант №1 Выяснить какие цифры(по одной справа и слева) надо приписать к...

Выяснить, какие цифры (по одной справа и слева) надо приписать к числу 1022, чтобы полученное число делилось на 7, 8, 9.
Выяснить, какие цифры (по одной справа и слева) надо приписать к числу 1022,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru