Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.util.Scanner;
- public class Main {
- private static Scanner scan = new Scanner(System.in);
- public static int getNum(int min, int max) {
- boolean isNotCorrect;
- int num;
- num = 0;
- do {
- isNotCorrect = false;
- try {
- num = Integer.parseInt(scan.nextLine());
- }
- catch (NumberFormatException e) {
- isNotCorrect = true;
- System.err.print("Некорректный ввод! Введите значение еще раз:" );
- }
- if ((!isNotCorrect) && (num < min || num > max)) {
- isNotCorrect = true;
- System.err.println("Недопустимое значение! Введите значение еще раз:");
- }
- } while (isNotCorrect);
- return num;
- }
- public static int minC(int a, int b) {
- int res;
- if (a < b) {
- res = a;
- }
- else {
- res = b;
- }
- return res;
- }
- public static int maxC(int a, int b) {
- int res;
- if (a > b) {
- res = a;
- }
- else {
- res = b;
- }
- return res;
- }
- public static void inputCoordinates (int[] arrX, int[] arrY, int i){
- final int MIN_COORDINATE = -100, MAX_COORDINATE = 100;
- System.out.println("Целое значение координаты X от " + MIN_COORDINATE + " до " + MAX_COORDINATE + ":");
- arrX[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
- System.out.println("Целое значение координаты Y от " + MIN_COORDINATE + " до " + MAX_COORDINATE + ":");
- arrY[i] = getNum(MIN_COORDINATE, MAX_COORDINATE);
- }
- public static void main(String[] args) {
- final int MIN_N = 3, MAX_N = 100;
- int n, i;
- boolean areCoordinatesNotUnique, isPointOnPolygon, isPointOnLine, isPointBetweenXCoord, isPointBetweenYCoord ;
- System.out.println("Данная программа определит, принадлежит ли точка с координатами X и Y многоугольнику");
- System.out.println("Введите количество вершин многоугольника N от " + MIN_N + " до " + MAX_N + ":");
- n = getNum(MIN_N, MAX_N);
- int[] arrX = new int[n + 2];
- int[] arrY = new int[n + 2];
- n++;
- System.out.println("Введите координаты точки X и Y");
- inputCoordinates(arrX, arrY, 0);
- System.out.println("Последовательно введите координаты X и Y каждой вершины");
- inputCoordinates(arrX, arrY, 1);
- i = 2;
- do {
- inputCoordinates(arrX, arrY, i);
- areCoordinatesNotUnique = ((arrX[i] == arrX[i-1]) && (arrY[i] == arrY[i-1]));
- if (areCoordinatesNotUnique) {
- System.out.println("Были заданы координаты той же вершины! Введите координаты следующей!");
- }
- else {
- i++;
- }
- } while(i < n);
- scan.close();
- arrX[n] = arrX[1];
- arrY[n] = arrY[1];
- i = 2;
- n++;
- 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 ( (i < n) && (!isPointOnPolygon) );
- if (isPointOnPolygon)
- {
- System.out.println("Точка находится на одной из сторон многоугольника");
- }
- else {
- System.out.println("Точка не находится ни на одной из сторон многоугольника");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement