C/C++

Проверьте пожалуйста правильно ли написана программа вопроса

Даны числа X1,Y1,X2,Y2,X3,Y3, - координаты трех каких-то вершин прямоугольника в прямоугольной
системе координат. Вычислить и напечатать координаты четвертой вершины.

#include
#include
using namespace std;
int main(){
float X1, Y1, X2, Y2, X3, Y3,X4,Y4, a, b, c;
cin >> X1 >> Y1 >> X2 >> Y2 >> X3 >> Y3;
a = pow(X1 - X2, 2) + pow(Y1 - Y2, 2);
b = pow(X2 - X3, 2) + pow(Y2 - Y3, 2);
c = pow(X1 - X3, 2) + pow(Y1 - Y3, 2);
if (c == a + b) {
X4 = fabs(X1 - X2) + X3;
Y4 = fabs(Y1 - Y2) + Y3;
cout << endl << X4 << " " << Y4;
}
else {
cout << "no prymaugolnik";
}
return 0;
}
#include <iostream>
using namespace std;
struct Point {
double x;
double y;
Point() : x(0), y(0) {}
double length(const Point& p)const {
return sqrt(pow(x - p.x, 2) + pow(y - p.y, 2));
}
};
struct Triangle {
Point a, b, c;
bool is_right_angle() {
auto ab = a.length(b);
auto bc = b.length(c);
auto ac = a.length(c);
auto p = ab + bc + ac;
auto sp = p / 2;
auto arg = sp * (sp - ab) * (sp - bc) * (sp - ac);
if (arg <= 0) return false;
auto mx = (ab > bc) ? (ab > ac) ? ab : ac : (bc > ac) ? bc : ac;
auto mn = (ab < bc) ? (ab < ac) ? ab : ac : (bc < ac) ? bc : ac;
auto md = p - mx - mn;
auto tp = mx * mx - (md * md + mn * mn);
if (fabs(tp) < 1e-12) {
auto xa = bc * bc - (ab * ab + ac * ac);
if (fabs(xa) < 1e-12) swap(a, b);
auto xc = ab * ab - (bc * bc + ac * ac);
if (fabs(xc) < 1e-12) swap(b, c);
return true;
}
return false;
}
};
struct Rectangle {
Point a, b, c, d;
Rectangle(const Triangle& tr) : a(tr.a), b(tr.b), c(tr.c) {
d.x = c.x - (b.x - a.x);
d.y = a.y - (b.y - c.y);
}
Point point_a()const { return a; }
Point point_b()const { return b; }
Point point_c()const { return c; }
Point point_d()const { return d; }
};
double coord() {
double value;
cin >> value;
return value;
}
Point point(const char* name) {
Point p;
cout << name << "x: ";
p.x = coord();
cout << name << "y: ";
p.y = coord();
return p;
}
int main() {
Triangle tr;
tr.a = point("A");
tr.b = point("B");
tr.c = point("C");
if (tr.is_right_angle()) {
Rectangle rect(tr);
auto [x, y] = rect.point_d();
cout
<< "Dx: " << x << '\n'
<< "Dy: " << y << '\n';
}
system("pause > nul");
}
Никита Кузьминых
Никита Кузьминых
56 584
Лучший ответ