Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
#1

Найти площадь прямоугольника, который принадлежит обеим осям координат - C++

11.11.2011, 17:29. Просмотров 1019. Ответов 19
Метки нет (Все метки)

Подскажите алгоритм! Есть два прямоугольника в декартовой системе исчисления. Их стороны параллельны осям координат. Как найти площадь прямоугольника, который принадлежит им обоим? Спасибо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 17:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти площадь прямоугольника, который принадлежит обеим осям координат (C++):

С++ Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них... - C++
17)Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого...

Определить площадь прямоугольника, ограниченного координатами точки и осями координат - C++
Точка на плоскости: координаты точки на плоскости (по горизонтали и верти- кали) x1 и y1 Определить площадь пря- моугольника,...

Найти площадь прямоугольника - C++
Известны координаты трех точек A(x1,y1),B(x2,y2),C(x3,y3) , которые являются вершинами некоторого прямоугольника. Найти площадь этого...

Найти площадь прямоугольника - C++
пожалуйста помогите разобратся в Рекурсии. не могу понять етот код: #include<iostream> #include<conio.h> using namespace std; ...

Найти периметр и площадь прямоугольника - C++
Класс А позволяет найти периметр прямоугольника по двум сторонам. Класс В, наследник А, имеет метод для определения площади по тем же...

Найти минимальную площадь прямоугольника из набора - C++
Данное целое число N и набор из N прямоугольников , заданных своими сторонами - парами чисел ( а , b ) . Найти минимальную площадь...

19
neske
1502 / 869 / 84
Регистрация: 26.03.2010
Сообщений: 2,983
11.11.2011, 17:40 #2
на вскидку - пройтись циклом по всем координатам, по ox от minx до maxx, аналогично oy. Если точка лежит внутри обоих прямоугольников, инкремент площади.
0
Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 18:42 #3
Оказывается было — наткнулся, пока искал алгоритм
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 18:47 #4
Пусть A(x1, y1), B(x2, y2) -левая нижняя и правая верхняя вершины первого прямоугольника, тоже самое для второго прямоугольника: C(x3, y3), D(x4, y4). Тогда вершины искомого прямоугольника
x5 = min{x1, x3},
x6 = max{x2, x4},
y5 = min{y1, y3},
y6 = max{y2, y4}
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.11.2011, 18:50 #5
Похоже так
Пусть P1 и P2 - прямоугольники
P3 - их пересечение

Тогда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
P3.left= max( P1.left, P2.left )
P3.right= min( P1.right, P2.right )
P3.top= max( P1.top, P2.top )
P3.bottom= min( P1.bottom, P2.bottom )
 
if ( P3.left<P3.right && P3.top<P3.bottom ) {
  // все получилось
} else {
  // пересечения нет
  // либо только касание
}
 
S= (P3.right-P3.left)*(P3.bottom-P3.top);
Считаем что оси координат направлены слева-направо
И сверху-вниз
На экране компьютера ось 0Y обычно считается сверху вниз
0
Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 18:50 #6
Thinker, у вас получится габаритный прямоугольник, а не пересечение, если я не ошибаюсь.
odip, вот тут может их местами поменять?
C++
1
2
P3.top= max( P1.top, P2.top )
P3.bottom= min( P1.bottom, P2.bottom )
->
C++
1
2
P3.top= min( P1.top, P2.top )
P3.bottom= max( P1.bottom, P2.bottom )
1
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.11.2011, 18:54 #7
Много кода
Да еще сортировка зачем-то

Добавлено через 1 минуту
Thinker, у вас получится габаритный прямоугольник, а не пересечение
Во всяком случае перечения точно не получится
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 18:55 #8
Цитата Сообщение от Dar101 Посмотреть сообщение
Thinker, у вас получится габаритный прямоугольник, а не пересечение, если я не ошибаюсь.
Опять невнимательно прочитал, то был прямоугольник, содержащий исходные, тогда min и max поменять местами и все

x5 = max{x1, x3},
x6 = min{x2, x4},
y5 = max{y1, y3},
y6 = min{y2, y4}

а затем проверить, если x5>=x6 или y5>=y6, то данные не корректны
0
odip
Эксперт С++
7158 / 3220 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.11.2011, 18:58 #9
x5 = min{x1, x3},
Очевидно x5 = max( x1, x3 )
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 19:01 #10
Цитата Сообщение от odip Посмотреть сообщение
Очевидно x5 = max( x1, x3 )
То было для прямоугольника, который вмещает ода исходных, задание невнимательно прочитал, постом выше переправил
0
GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 20:12  [ТС] #11
Мне пока мало чего понятно... Если что не ругайте сильно.
У нас введены координаты одного прямоугольника:
х1 - левый верхний, у1
и второго
х2, у2
Как найти координаты их пересечения?
0
Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 22:15 #12
GhostVIRUS, не совсем:

x1, y1 — левая нижняя точка первого прямоугольника;
x2, y2 — верхняя правая точка первого прямоугольника;
x3, y3 — левая нижняя точка второго прямоугольника;
x4, y4 — верхняя правая точка второго прямоугольника;

В алгоритмах, описанных выше по теме точки пересечения прямоугольников не ищутся, а находится длина сторон общего прямоугольника.
Пиши код, если что подправим.
1
GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 22:27  [ТС] #13
Цитата Сообщение от Thinker Посмотреть сообщение
а затем проверить, если x5>=x6 или y5>=y6, то данные не корректны
Под выражением "некорректные данные" подразумевается что прямоугольники не имеют общей части?
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 22:28 #14
Цитата Сообщение от GhostVIRUS Посмотреть сообщение
Под выражением "некорректные данные" подразумевается что прямоугольники не имеют общей части?
Именно так, всякое же может быть.
1
GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 22:48  [ТС] #15
Цитата Сообщение от Thinker Посмотреть сообщение
x5 = max{x1, x3},
x6 = min{x2, x4},
y5 = max{y1, y3},
y6 = min{y2, y4}
Наконец нарисовав картинку врубился. Спасибо... Буду код писать:cofee2:

Добавлено через 11 минут
Извините за глупый вопрос...
Просто мозги уже не варят (целый день водился с другой задачей)
А что если входные данные - левый верхний и правый нижний?
0
11.11.2011, 22:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2011, 22:48
Привет! Вот еще темы с ответами:

Найти площадь крупнейшего сплошного прямоугольника суши - C++
Наибольшая площадь Территория состоит из квадратиков суши (обозначены единичками) и воды (обозначены ноликами). Найти площадь крупнейшего...

Даны стороны прямоугольника a и b Найти его площадь S и периметр P - C++
1)Даны стороны прямоугольника a и b. Найти его площадь S

Дана гипотенуза с, и угол альфа прямоугольника, найти площадь и периметр - C++
Дана гипотенуза с, и угол альфа прямоугольника, найти площадь и периметр

По заданным координатам вершин прямоугольника ABCD найти его площадь и периметр - C++
Известны координаты вершин прямоугольника ABCD , A(x1,y1), B(x2,y2), C(x3,y3). Найти площадь и периметр. Напишите пожалуйста полностью...


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

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

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