Advertisement
THOMAS_SHELBY_18

Lab2_1(Java)

Oct 15th, 2023
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.26 KB | Source Code | 0 0
  1. package com.company;
  2. import java.util.Scanner;
  3.  
  4. public class Main {
  5.     private static Scanner scan = new Scanner(System.in);
  6.     public static int getNum(int min, int max) {
  7.         boolean isNotCorrect;
  8.         int num;
  9.  
  10.         num = 0;
  11.  
  12.         do {
  13.             isNotCorrect = false;
  14.             try {
  15.                 num = Integer.parseInt(scan.nextLine());
  16.             }
  17.             catch (NumberFormatException e)  {
  18.                 isNotCorrect = true;
  19.                 System.err.print("Некорректный ввод! Введите значение еще раз:" );
  20.             }
  21.             if ((!isNotCorrect) && (num < min || num > max)) {
  22.                 isNotCorrect = true;
  23.                 System.err.println("Недопустимое значение! Введите значение еще раз:");
  24.             }
  25.         } while (isNotCorrect);
  26.         return num;
  27.     }
  28.     public static int minC(int a, int b) {
  29.         int res;
  30.         if (a < b) {
  31.             res = a;
  32.         }
  33.         else {
  34.             res = b;
  35.         }
  36.         return res;
  37.     }
  38.     public static int maxC(int a, int b) {
  39.         int res;
  40.         if (a > b) {
  41.             res = a;
  42.         }
  43.         else {
  44.             res = b;
  45.         }
  46.         return res;
  47.     }
  48.     public static void inputCoordinates (int[] arrX, int[] arrY, int i){
  49.     final int MIN_COORDINATE = -100, MAX_COORDINATE = 100;
  50.         System.out.println("Целое значение координаты X от " + MIN_COORDINATE + " до " + MAX_COORDINATE + ":");
  51.         arrX[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
  52.         System.out.println("Целое значение координаты Y от " + MIN_COORDINATE + " до " + MAX_COORDINATE + ":");
  53.         arrY[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
  54.     }
  55.  
  56.     public static void main(String[] args) {
  57.         final int MIN_N = 3, MAX_N = 100;
  58.         int n, i;
  59.         boolean areCoordinatesNotUnique, isPointOnPolygon, isPointOnLine, isPointBetweenXCoord, isPointBetweenYCoord ;
  60.  
  61.         System.out.println("Данная программа определит, принадлежит ли точка с координатами X и Y многоугольнику");
  62.  
  63.         System.out.println("Введите количество вершин многоугольника N от " + MIN_N + " до " + MAX_N + ":");
  64.         n = getNum(MIN_N, MAX_N);
  65.  
  66.         int[] arrX = new int[n + 2];
  67.         int[] arrY = new int[n + 2];
  68.         n++;
  69.  
  70.         System.out.println("Введите координаты точки X и Y");
  71.         inputCoordinates(arrX, arrY, 0);
  72.  
  73.         System.out.println("Последовательно введите координаты X и Y каждой вершины");
  74.         inputCoordinates(arrX, arrY, 1);
  75.         i = 2;
  76.         do {
  77.             inputCoordinates(arrX, arrY, i);
  78.             areCoordinatesNotUnique = ((arrX[i] == arrX[i-1]) && (arrY[i] == arrY[i-1]));
  79.             if (areCoordinatesNotUnique) {
  80.                 System.out.println("Были заданы координаты той же вершины! Введите координаты следующей!");
  81.             }
  82.             else {
  83.                 i++;
  84.             }
  85.         } while(i < n);
  86.         scan.close();
  87.  
  88.         arrX[n] = arrX[1];
  89.         arrY[n] = arrY[1];
  90.  
  91.         i = 2;
  92.         n++;
  93.         do {
  94.             isPointOnLine = ((arrY[0] - arrY[i - 1]) * (arrX[i] - arrX[i - 1]) == (arrY[i] - arrY[i - 1]) * (arrX[0] - arrX[i - 1]));
  95.             isPointBetweenXCoord = (arrX[0] >= minC(arrX[i - 1], arrX[i])) && (arrX[0] <= maxC(arrX[i - 1], arrX[i]));
  96.             isPointBetweenYCoord = (arrY[0] >= minC(arrY[i - 1], arrY[i])) && (arrY[0] <= maxC(arrY[i - 1], arrY[i]));
  97.             isPointOnPolygon = (isPointOnLine && isPointBetweenXCoord && isPointBetweenYCoord);
  98.             i++;
  99.         } while ( (i < n) && (!isPointOnPolygon)   );
  100.  
  101.         if (isPointOnPolygon)
  102.         {
  103.             System.out.println("Точка находится на одной из сторон многоугольника");
  104.         }
  105.         else {
  106.             System.out.println("Точка не находится ни на одной из сторон многоугольника");
  107.         }
  108.     }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement