Untitled
unknown
plain_text
2 years ago
3.1 kB
4
Indexable
#include <iostream> #include <vector> using namespace std; // Структура, представляющая точку на плоскости struct Point { int x, y; }; // Функция для определения ориентации трех точек (направление обхода) int orientation(Point p, Point q, Point r) { int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); if (val == 0) return 0; // Коллинеарны return (val > 0) ? 1 : 2; // по часовой или против часовой стрелки } // Функция для проверки, лежит ли точка q на отрезке pr bool onSegment(Point p, Point q, Point r) { return (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) && q.y <= max(p.y, r.y) && q.y >= min(p.y, r.y)); } // Функция для определения пересечения двух отрезков bool doIntersect(Point p1, Point q1, Point p2, Point q2) { int o1 = orientation(p1, q1, p2); int o2 = orientation(p1, q1, q2); int o3 = orientation(p2, q2, p1); int o4 = orientation(p2, q2, q1); // Общий случай if (o1 != o2 && o3 != o4) return true; // Особые случаи if (o1 == 0 && onSegment(p1, p2, q1)) return true; if (o2 == 0 && onSegment(p1, q2, q1)) return true; if (o3 == 0 && onSegment(p2, p1, q2)) return true; if (o4 == 0 && onSegment(p2, q1, q2)) return true; return false; } // Функция для определения площади фигуры int findArea(vector<Point> polygon) { int n = polygon.size(); if (n < 3) return 0; // Многоугольник должен иметь хотя бы три вершины int area = 0; // Инициализация площади // Проход по каждой паре смежных вершин for (int i = 0; i < n; i++) { int j = (i + 1) % n; area += (polygon[i].x * polygon[j].y - polygon[j].x * polygon[i].y); } // Возвращаем абсолютное значение, так как площадь может быть отрицательной return abs(area / 2); } int main() { // Ввод координат вершин многоугольника от пользователя setlocale(LC_ALL, "Russian"); int numVertices; cout << "Введите количество вершин многоугольника: "; cin >> numVertices; vector<Point> polygon; for (int i = 0; i < numVertices; ++i) { Point vertex; cout << "Введите координаты вершины " << i + 1 << ": "; cin >> vertex.x >> vertex.y; polygon.push_back(vertex); } // Вызов функции для определения площади int area = findArea(polygon); // Вывод результата cout << "Площадь фигуры: " << area << endl; return 0; }
Editor is loading...
Leave a Comment