Untitled
unknown
plain_text
2 years ago
3.1 kB
7
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