C/C++

Помогите с задачкой по C++

Написать программу, которая проверяет, пересекается ли круг с прямоугольником. радиус круга, его координаты (x,y) и длинна-ширина прямоугольника и его координаты задаются пользователем.
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
double real(istream& inp, const char* msg) {
auto value = 0.0;
cout << msg;
inp >> value;
inp.ignore(inp.rdbuf()->in_avail());
return value;
}
struct Coord {
double x;
double y;
Coord() : x(0), y(0) {}
friend bool operator<(const Coord& a, const Coord& b) {
return a.x < b.x && a.y < b.y;
}
friend istream& operator>>(istream& inp, Coord& coord) {
coord.x = real(inp, "x: ");
coord.y = real(inp, "y: ");
return inp;
}
};
struct Circle {
double r;
Coord o;
Circle() : r(0) {}
bool exist()const {
return r > 0;
}
friend istream& operator>>(istream& inp, Circle& cir) {
cir.r = real(inp, "Radius: ");
return inp >> cir.o;
}
};
struct Rectangle {
Coord a;
Coord b;
bool exist()const {
return a.x != b.x && a.y != b.y;
}
void normalize() {
if (a < b) swap(a, b);
}
friend istream& operator>>(istream& inp, Rectangle& rec) {
puts("Point A:");
inp >> rec.a;
puts("Point B:");
return inp >> rec.b;
}
};
bool intersection(const Circle& cir, const Rectangle& rec) {
auto crr = pow(cir.r, 2);
auto axx = pow(rec.a.x - cir.o.x, 2);
auto bxx = pow(rec.b.x - cir.o.x, 2);
auto ayy = pow(rec.a.y - cir.o.y, 2);
auto byy = pow(rec.b.y - cir.o.y, 2);
return (cir.o.x > rec.a.x - cir.r
&& cir.o.x < rec.b.x + cir.r
&& rec.a.y > cir.o.y
&& cir.o.y > rec.b.y)
|| (cir.o.y > rec.b.y - cir.r
&& cir.o.y < rec.a.y + cir.r
&& rec.a.x > cir.o.x
&& cir.o.x > rec.b.x)
|| axx + ayy < crr
|| axx + byy < crr
|| bxx + ayy < crr
|| bxx + byy < crr;
}
bool intersection(const Rectangle& rec, const Circle& cir) {
return intersection(cir, rec);
}
int main() {
Circle cir;
Rectangle rec;
cin >> cir >> rec;
rec.normalize();
if (cir.exist() && rec.exist()) {
puts(intersection(cir, rec) ? "Yes" : "No");
} else {
puts("Oops!");
}
system("pause > nul");
}
Сердар Амангельдыев
Сердар Амангельдыев
66 598
Лучший ответ
Написать само решение не могу, но вычисли сначала координаты точек прямоугольника и координаты точек окружности (с окружностью тебе поможет формула X^2+Y^2=радиус_круга^2) и делай проверку на совпадение точек прямоугольника и окружности