Напишите функцию Rectangle intersect(Rectangle r1, Rectangle r2), которая вернёт пересечение прямоугольников r1 и r2 — новый прямоугольник.
Если у прямоугольников r1 и r2 нет пересечения, то допускается в качестве результата работы функции вернуть любой неположительный по площади прямоугольник.
Используя функцию rectangle_square, описанную в предыдущей задаче, посчитайте площадь пересечения прямоугольников, вводимых с клавиатуры.
Формат входных данных
Даны координаты двух пар точек, заданных с точностью не более 2 знаков после десятичной точки. Координаты не превосходят по модулю 1000.
Последовательность чисел следующая:
- точка r1.p1: x и y
- точка r1.p2: x и y
- точка r2.p1: x и y
- точка r2.p2: x и y
Формат выходных данных
Требуется вывести одно вещественное число — площадь пересечения прямоугольников с точностью не менее 6 знаков после десятичной точки. Если прямоугольники не пересекаются, то выведите 0.
входные данные
4.0 6.0 3.0 9.0
1.0 4.0 5.0 8.0
выходные данные
2,000000
Другие языки программирования и технологии
Задаю этот вопрос уже 3-й раз. Язык с++. Алгоритм я понимаю но вставить в код не могу ( Кому не сложно скиньте код!
#include <iostream>
#include <algorithm>
using namespace std;
struct Coord {
double x;
double y;
Coord() : x(0), y(0) {}
Coord(double x, double y) : x(x), y(y) {}
friend istream& operator>>(istream& in, Coord& p) {
in >> p.x >> p.y;
return in;
}
};
class Rectangle {
public:
Rectangle() = default;
Rectangle(const Coord& a, const Coord& b) : a_(a), b_(b) {
normalize_();
}
double area()const {
return fabs(a_.x - b_.x) * fabs(a_.y - b_.y);
}
Rectangle intersection(const Rectangle& rect) {
auto left = max(a_.x, rect.a_.x);
auto right = min(b_.x, rect.b_.x);
auto bottom = max(a_.y, rect.a_.y);
auto top = min(b_.y, rect.b_.y);
if (right - left < 0 || top - bottom < 0) return Rectangle();
return Rectangle(Coord(left, bottom), Coord(right, top));
}
private:
Coord a_;
Coord b_;
void normalize_() {
if (a_.y > b_.y) swap(a_.y, b_.y);
else if (a_.x > b_.x) swap(a_.x, b_.x);
}
};
Coord coord() {
Coord p;
cin >> p;
return p;
}
Rectangle rectangle() {
Coord p1, p2;
p1 = coord();
p2 = coord();
return Rectangle(p1, p2);
}
int main() {
auto r1 = rectangle();
auto r2 = rectangle();
cout << r1.intersection(r2).area() << '\n';
system("pause");
}
#include <algorithm>
using namespace std;
struct Coord {
double x;
double y;
Coord() : x(0), y(0) {}
Coord(double x, double y) : x(x), y(y) {}
friend istream& operator>>(istream& in, Coord& p) {
in >> p.x >> p.y;
return in;
}
};
class Rectangle {
public:
Rectangle() = default;
Rectangle(const Coord& a, const Coord& b) : a_(a), b_(b) {
normalize_();
}
double area()const {
return fabs(a_.x - b_.x) * fabs(a_.y - b_.y);
}
Rectangle intersection(const Rectangle& rect) {
auto left = max(a_.x, rect.a_.x);
auto right = min(b_.x, rect.b_.x);
auto bottom = max(a_.y, rect.a_.y);
auto top = min(b_.y, rect.b_.y);
if (right - left < 0 || top - bottom < 0) return Rectangle();
return Rectangle(Coord(left, bottom), Coord(right, top));
}
private:
Coord a_;
Coord b_;
void normalize_() {
if (a_.y > b_.y) swap(a_.y, b_.y);
else if (a_.x > b_.x) swap(a_.x, b_.x);
}
};
Coord coord() {
Coord p;
cin >> p;
return p;
}
Rectangle rectangle() {
Coord p1, p2;
p1 = coord();
p2 = coord();
return Rectangle(p1, p2);
}
int main() {
auto r1 = rectangle();
auto r2 = rectangle();
cout << r1.intersection(r2).area() << '\n';
system("pause");
}
☝Дык надо спросить не три раза, а тридцать три!.. ☺
Паша Буздалин
Щас этим и буду заниматься)
для начала можно реализовать некоторую "стандартизацию" прямоугольника - чтобы две точки, по которым он определяется всегдя были левая-нижняя правая-верхняя (к примеру). тогда проще будет дальше пересечение прямоугольников выписать
https://rextester.com/ACCZ24588
https://rextester.com/ACCZ24588
Похожие вопросы
- Люди скиньте пожаалуйста КОД! Очень сильно прошу! Язык программирования с++ ПАМАГИТИ если не сложно) Просто скиньте код)
- Лёгкий вопрос: на каком языке реализован алгоритм?
- как научиться писать хороший код? В смысле я даже не понимаю что такое хороший код. Что такое хороший код?
- Программирование. Опишите на языке программирования алгоритм вычисления...
- Помогите решить задачу на языке c++. Не понимаю условия в конце кода.
- Помогите с написанием программы на языке Ассемблер, алгоритм знаю, вот только команды самого языка - не очень.
- Значит такой вопрос. Для чего нужен компилятор Free pascal. Не я понимаю что это язык программирования и...
- Какой язык даст большее быстродействие готового кода С++,Делфи, Ассемлер, в таком куске кода (внутри)?
- Возможно задаю глупый вопрос, так что извиняйте, почему бы в языках программирования не сделать динамические переменные?
- Всем привет! Кому не сложно, проверьте, пожалуйста, на правильность написание моего когда на алгоритмическом языке