Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <windows.h>
- using namespace std;
- int getNum(int min, int max){
- bool isNotCorrect;
- int num;
- do {
- isNotCorrect = true;
- cin >> num;
- if (cin.fail() || (cin.get() != '\n')) {
- cout << "Некорректный ввод! Введите значение еще раз:" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- else {
- if (min < num && max > num) {
- isNotCorrect = false;
- }
- else {
- cout << "Недопустимое значение! Введите значение еще раз:" << endl;
- }
- }
- } while (isNotCorrect);
- return num;
- }
- int minC(int a, int b) {
- int res;
- if (a < b) {
- res = a;
- }
- else {
- res = b;
- }
- return res;
- }
- int maxC(int a, int b) {
- int res;
- if (a > b) {
- res = a;
- }
- else {
- res = b;
- }
- return res;
- }
- void inputCoordinates (int arrX[], int arrY[], int i){
- const int MIN_COORDINATE = -100, MAX_COORDINATE = 100;
- cout << "Целое значение координаты X от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
- arrX[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
- cout << "Целое значение координаты Y от " << MIN_COORDINATE << " до " << MAX_COORDINATE << ":";
- arrY[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
- }
- int main() {
- SetConsoleOutputCP(CP_UTF8);
- const int MIN_N = 3, MAX_N = 100;
- int n, i;
- bool areCoordinatesNotUnique, isPointOnPolygon, isPointOnLine, isPointBetweenXCoord, isPointBetweenYCoord ;
- cout << "Данная программа определит, принадлежит ли точка с координатами X и Y многоугольнику" << endl;
- cout << "Введите количество вершин многоугольника N от " << MIN_N << " до " << MAX_N << ":";
- n = getNum(MIN_N, MAX_N);
- int* arrX = new int[n + 2];
- int* arrY = new int[n + 2];
- n += 1;
- cout << "Введите координаты точки X и Y" << endl;
- inputCoordinates(arrX, arrY, 0);
- cout << "Последовательно введите координаты X и Y каждой вершины" << endl;
- inputCoordinates(arrX, arrY, 1);
- i = 2;
- do {
- inputCoordinates(arrX, arrY, i);
- areCoordinatesNotUnique = ((arrX[i] == arrX[i-1]) && (arrY[i] == arrY[i-1]));
- if (areCoordinatesNotUnique) {
- cout << "Были заданы координаты той же вершины! Введите координаты следующей!" << endl;
- }
- else i++;
- } while(i < n);
- arrX[n] = arrX[1];
- arrY[n] = arrY[1];
- i = 2;
- do {
- isPointOnLine = ((arrY[0] - arrY[i - 1]) * (arrX[i] - arrX[i - 1]) == (arrY[i] - arrY[i - 1]) * (arrX[0] - arrX[i - 1]));
- isPointBetweenXCoord = (arrX[0] >= minC(arrX[i - 1], arrX[i])) && (arrX[0] <= maxC(arrX[i - 1], arrX[i]));
- isPointBetweenYCoord = (arrY[0] >= minC(arrY[i - 1], arrY[i])) && (arrY[0] <= maxC(arrY[i - 1], arrY[i]));
- isPointOnPolygon = (isPointOnLine && isPointBetweenXCoord && isPointBetweenYCoord);
- i++;
- } while ( (!isPointOnPolygon) && (i < n) );
- if (isPointOnPolygon)
- {
- cout << "Точка находится на одной из сторон многоугольника";
- }
- else {
- cout << "Точка не находится ни на одной из сторон многоугольника";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement