Ответ:
#include <iostream>
#include <vector>
struct Point {
double x, y;
Point(double x, double y) : x(x), y(y) {}
};
bool isPointInsidePolygon(const Point& point, const std::vector<Point>& polygon) {
int numVertices = polygon.size();
bool isInside = false;
for (int i = 0, j = numVertices - 1; i < numVertices; j = i++) {
if ((polygon[i].y > point.y) != (polygon[j].y > point.y) &&
(point.x < (polygon[j].x - polygon[i].x) * (point.y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)) {
isInside = !isInside;
}
return isInside;
int main() {
// Вершини полiгона
std::vector<Point> polygon = {
Point(-2, -1),
Point(-1, 1),
Point(0, 0),
Point(1, 0)
// Точка для перевiрки
Point testPoint(-1, 0);
// Перевiримо чи належить точка площині
if (isPointInsidePolygon(testPoint, polygon)) {
std::cout << "Точка належить площині." << std::endl;
} else {
std::cout << "Точка не належить площині." << std::endl;
return 0;
Объяснение:
Copyright © 2024 SCHOLAR.TIPS - All rights reserved.
Answers & Comments
Ответ:
#include <iostream>
#include <vector>
struct Point {
double x, y;
Point(double x, double y) : x(x), y(y) {}
};
bool isPointInsidePolygon(const Point& point, const std::vector<Point>& polygon) {
int numVertices = polygon.size();
bool isInside = false;
for (int i = 0, j = numVertices - 1; i < numVertices; j = i++) {
if ((polygon[i].y > point.y) != (polygon[j].y > point.y) &&
(point.x < (polygon[j].x - polygon[i].x) * (point.y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)) {
isInside = !isInside;
}
}
return isInside;
}
int main() {
// Вершини полiгона
std::vector<Point> polygon = {
Point(-2, -1),
Point(-1, 1),
Point(0, 0),
Point(1, 0)
};
// Точка для перевiрки
Point testPoint(-1, 0);
// Перевiримо чи належить точка площині
if (isPointInsidePolygon(testPoint, polygon)) {
std::cout << "Точка належить площині." << std::endl;
} else {
std::cout << "Точка не належить площині." << std::endl;
}
return 0;
}
Объяснение: