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

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

Восстановить пароль Регистрация
 
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 17:29     Найти площадь прямоугольника, который принадлежит обеим осям координат #1
Подскажите алгоритм! Есть два прямоугольника в декартовой системе исчисления. Их стороны параллельны осям координат. Как найти площадь прямоугольника, который принадлежит им обоим? Спасибо...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 17:29     Найти площадь прямоугольника, который принадлежит обеим осям координат
Посмотрите здесь:

С++ Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них... C++
C++ Найти периметр и площадь прямоугольника
C++ Найти площадь крупнейшего сплошного прямоугольника суши
Найти площадь прямоугольника C++
Дана гипотенуза с, и угол альфа прямоугольника, найти площадь и периметр C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,693
11.11.2011, 17:40     Найти площадь прямоугольника, который принадлежит обеим осям координат #2
на вскидку - пройтись циклом по всем координатам, по ox от minx до maxx, аналогично oy. Если точка лежит внутри обоих прямоугольников, инкремент площади.
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 18:42     Найти площадь прямоугольника, который принадлежит обеим осям координат #3
Оказывается было — наткнулся, пока искал алгоритм
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 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}
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
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 обычно считается сверху вниз
Dar101
 Аватар для 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 )
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
11.11.2011, 18:54     Найти площадь прямоугольника, который принадлежит обеим осям координат #7
Много кода
Да еще сортировка зачем-то

Добавлено через 1 минуту
Thinker, у вас получится габаритный прямоугольник, а не пересечение
Во всяком случае перечения точно не получится
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 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, то данные не корректны
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
11.11.2011, 18:58     Найти площадь прямоугольника, который принадлежит обеим осям координат #9
x5 = min{x1, x3},
Очевидно x5 = max( x1, x3 )
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 19:01     Найти площадь прямоугольника, который принадлежит обеим осям координат #10
Цитата Сообщение от odip Посмотреть сообщение
Очевидно x5 = max( x1, x3 )
То было для прямоугольника, который вмещает ода исходных, задание невнимательно прочитал, постом выше переправил
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 20:12  [ТС]     Найти площадь прямоугольника, который принадлежит обеим осям координат #11
Мне пока мало чего понятно... Если что не ругайте сильно.
У нас введены координаты одного прямоугольника:
х1 - левый верхний, у1
и второго
х2, у2
Как найти координаты их пересечения?
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 22:15     Найти площадь прямоугольника, который принадлежит обеим осям координат #12
GhostVIRUS, не совсем:

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

В алгоритмах, описанных выше по теме точки пересечения прямоугольников не ищутся, а находится длина сторон общего прямоугольника.
Пиши код, если что подправим.
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 22:27  [ТС]     Найти площадь прямоугольника, который принадлежит обеим осям координат #13
Цитата Сообщение от Thinker Посмотреть сообщение
а затем проверить, если x5>=x6 или y5>=y6, то данные не корректны
Под выражением "некорректные данные" подразумевается что прямоугольники не имеют общей части?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 22:28     Найти площадь прямоугольника, который принадлежит обеим осям координат #14
Цитата Сообщение от GhostVIRUS Посмотреть сообщение
Под выражением "некорректные данные" подразумевается что прямоугольники не имеют общей части?
Именно так, всякое же может быть.
GhostVIRUS
 Аватар для 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 минут
Извините за глупый вопрос...
Просто мозги уже не варят (целый день водился с другой задачей)
А что если входные данные - левый верхний и правый нижний?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.11.2011, 22:53     Найти площадь прямоугольника, который принадлежит обеим осям координат #16
Цитата Сообщение от GhostVIRUS Посмотреть сообщение
А что если входные данные - левый верхний и правый нижний?
x5 = max{x1, x3},
x6 = min{x2, x4},
y5 = min{y1, y3},
y6 = max{y2, y4}
Тогда это координаты тоже получатся левый верхний и правый нижний
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 22:54     Найти площадь прямоугольника, который принадлежит обеим осям координат #17
Если:
x1, y1 — левая верхняя точка первого прямоугольника;
x2, y2 — правая нижняя точка первого прямоугольника;
x3, y3 — левая верхняя точка второго прямоугольника;
x4, y4 — правая нижняя точка второго прямоугольника;

То:
x5 = max{x1, x3} — левая сторона
y5 = min{y1, y3} — верх
x6 = min{x2, x4} — правая сторона
y6 = max{y2, y4} — низ
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
11.11.2011, 23:26  [ТС]     Найти площадь прямоугольника, который принадлежит обеим осям координат #18
Спасибо...

Добавлено через 29 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6 = 0;
 
int main()
{
    cout << "Input: ";
    cin >> x1 >> y1 >> x2 >> y2;
    cin >> x3 >> y3 >> x4 >> y4;
 
    x5 = x1>x3 ? x1 : x3;
    y5 = y1>y3 ? y1 : y3;
    x6 = x2<x4 ? x2 : x4;
    y6 = y2<y4 ? y2 : y4;
 
    cout << (x6 - x5) * (y6 - y5);
 
    return 0;
}
Вот настрочил. Выбивает 100500 ошибок.
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
11.11.2011, 23:42     Найти площадь прямоугольника, который принадлежит обеим осям координат #19
Какая первая ошибка?
"y1 redefinition"? : )
Занеси объявление переменных в main тогда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2011, 17:55     Найти площадь прямоугольника, который принадлежит обеим осям координат
Еще ссылки по теме:

Даны стороны прямоугольника a и b Найти его площадь S и периметр P C++
Найти минимальную площадь прямоугольника из набора C++
По заданным координатам вершин прямоугольника ABCD найти его площадь и периметр C++

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

Или воспользуйтесь поиском по форуму:
GhostVIRUS
 Аватар для GhostVIRUS
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 81
12.11.2011, 17:55  [ТС]     Найти площадь прямоугольника, который принадлежит обеим осям координат #20
Спасибо, помогло. А из-за чего это переопределение было? И почему когда я перенес, оно исправилось?

Добавлено через 1 минуту
Да и еще, ведь можно задать и отрицательные координаты...

Добавлено через 4 часа 26 минут
Мне кто-то может ответить?

Добавлено через 2 часа 30 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
int main()
{
    int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6 = 0;
    cout << "Input: ";
    cin >> x1 >> y1 >> x2 >> y2;
    cin >> x3 >> y3 >> x4 >> y4;
 
    x5 = abs (x1) > abs (x3) ? x1 : x3;
    y5 = abs (y1) > abs (y3) ? y1 : y3;
    x6 = abs (x2) < abs (x4) ? x2 : x4;
    y6 = abs (y2) < abs (y4) ? y2 : y4;
 
    if(x5 >= x6 || y5>=y6)
        cout << "0";
    else
    cout << (abs (x6 - x5) * abs (y6 - y5)) / 2;
 
    return 0;
}
Верно ли я понял алгоритм? Просто не уверен...
Yandex
Объявления
12.11.2011, 17:55     Найти площадь прямоугольника, который принадлежит обеим осям координат
Ответ Создать тему
Опции темы

Текущее время: 18:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru