Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Математическая часть - векторное и псевдоскалярное произведения.
- Реализация - считаются произведения (1, 2, 3 - вершины треугольника, 0 - точка):
- (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0)
- (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0)
- (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0)
- Если они одинакового знака, то точка внутри треугольника, если что-то из этого - ноль, то точка лежит на стороне, иначе точка вне треугольника.
- */
- #include <iostream>
- #include <cmath>
- using namespace std;
- class Triangle {
- private:
- int x1, y1, x2, y2, x3, y3;
- public:
- Triangle (int X1, int Y1, int X2, int Y2, int X3, int Y3) {
- x1 = X1;
- y1 = Y1;
- x2 = X2;
- y2 = Y2;
- x3 = X3;
- y3 = Y3;
- }
- Triangle () {
- x1 = y1 = x2 = y2 = x3 = y3 = 0;
- }
- ~Triangle() {
- cout << "Working destructor!" << endl;
- }
- double space() {
- double side_one = 0., side_two = 0., side_three = 0.;
- side_one = sqrt(pow((x1 - x2), 2.) + pow((y1 - y2), 2.));
- side_two = sqrt(pow((x2 - x3), 2.) + pow((y2 - y3), 2.));
- side_three = sqrt(pow((x1 - x3), 2.) + pow((y1 - y3), 2.));
- double p = 0.;
- p = (side_one + side_two + side_three) / 2;
- double space_area = 0.;
- space_area = sqrt(p * (p - side_one) * (p - side_two) * (p - side_three));
- return space_area;
- }
- void operator% (Triangle t) {
- if (space() == t.space()) {
- cout << "Площади треугольников равны! " << endl;
- } else {
- cout << "Площади не равны! " << endl;
- }
- }
- bool check_triangle() {
- double side_one = 0., side_two = 0., side_three = 0.;
- side_one = sqrt(pow((x1 - x2), 2.) + pow((y1 - y2), 2.));
- side_two = sqrt(pow((x2 - x3), 2.) + pow((y2 - y3), 2.));
- side_three = sqrt(pow((x1 - x3), 2.) + pow((y1 - y3), 2.));
- if ((side_one < side_two + side_three) && (side_two < side_one + side_three) && (side_three < side_one + side_two)) {
- return true;
- } else
- return false;
- }
- bool isEncluded() {
- double x0, y0;
- cout << "Введите точку, которую следует проверить на включение: ";
- cin >> x0 >> y0;
- int first_eq = (x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0);
- int second_eq = (x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0);
- int third_eq = (x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0);
- if (first_eq <= 0 && second_eq <= 0 && third_eq <= 0) {
- return true;
- } else {
- return false;
- }
- }
- };
- int main() {
- setlocale(LC_ALL, "Russian");
- int x1, y1, x2, y2, x3, y3;
- cout << "Введите последовательно (через пробел) координаты первого треугольника x1, y1, x2, y2, x3, y3: ";
- cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
- Triangle a(x1, y1, x2, y2, x3, y3);
- cout << "Введите последовательно (через пробел) координаты второго треугольника x1, y1, x2, y2, x3, y3: ";
- cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
- Triangle b(x1, y1, x2, y2, x3, y3);
- start: if (a.check_triangle() && b.check_triangle()) {
- char choice;
- cout << "Выберите, что хотите сделать с треугольником:\n*****Найти его площадь --- s\n*****Проверить, включена ли точка в треугольник --- i\n*****Сравнить два треугольника по площадям --- %\n**********Ваш ввод: ";
- cin >> choice;
- cout << endl;
- switch(choice) {
- case('s'):
- cout << "Выберите треугольник, у которого хотите найти площадь (1 - первый, 2 - второй): ";
- cin >> choice;
- if (choice == '1') {
- cout << "Площадь первого треугольника равна " << a.space() << endl;
- break;
- } else {
- cout << "Площадь второго треугольника равна " << b.space() << endl;
- break;
- }
- case('%'):
- a % b;
- break;
- case('i'):
- cout << "Выберите треугольник, к которому хотите найти включение (1 - первый, 2 - второй): ";
- cin >> choice;
- if (choice == '1') {
- if (a.isEncluded()) {
- cout << "Включена!" << endl;
- } else {
- cout << "Не включена!" << endl;
- }
- } else {
- if (b.isEncluded()) {
- cout << "Включена!" << endl;
- } else {
- cout << "Не включена!" << endl;
- }
- }
- }
- } else {
- cout << "Неверно заданы координаты вершин треугольника, они не образуют треугольник!\n";
- main();
- }
- bool choice_continue;
- cout << "Введите то, что хотите сделать (\"1\" - продолжить работу, \"0\" - выход) : ";
- cin >> choice_continue;
- if (choice_continue) {
- goto start;
- } else {
- system("pause");
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment