2017-02-22 53 views
-1

Я хочу найти, лежит ли точка внутри квадрата или нет. Мне дали конечные координаты диагонали квадрата, и я выяснил координаты конца другой диагонали.Как найти, лежит ли точка внутри квадрата или нет на Java?

Один из методов, который я мог придумать, заключался в том, чтобы решить его, используя свойство обрезания. Я включил все точки внутри окружности квадрата, но я не могу придумать метод, чтобы исключить дополнительные очки.

Ребра не параллельны ни одной оси координат.

Есть ли способ сделать это в java?

Heres моя часть кода:

if(distance(x1,y1,x2,y2,j,i)<=dd) 
     A[i][j]=1;   
    else 
     A[i][j]=0; 

x1, y1, x2, y2 являются координатами диагонали квадрата и дд длина диагонали и I, J являются координатами больше, чем 0 и меньше 100. Я использую массив для хранения точек, удовлетворяющих условию.

+0

Эта статья может помочь вам. http://alienryderflex.com/polygon/ –

+1

Для квадрата, края которого не обязательно параллельны системе координат, см. также http://math.stackexchange.com/questions/190111/how-to-check-if-a -point-is-inside-a-rectangle. Путь вниз по списку - это ответ на вопрос о том, находится ли точка по часовой стрелке или против часовой стрелки от вектора. «Алгоритмы» Cedgewick в C »обеспечивают псевдокод для этого теста ccw(), и предполагает, что многоугольники с тремя или четырьмя сторонами являются более простым случаем, чем« точка в полигоне », где достаточно просто провести этот тест для каждой из сторон. [Вы можете найти псевдокод онлайн.] –

+0

Ваш одноклассник здесь: http://stackoverflow.com/questions/42407174/ – MBo

ответ

0

В этом случае, я думаю, вы могли бы попытаться запрограммировать расстояние в манхаттане от точки до центра квадрата и сравнить его с расстоянием между Манхэттеном от центра квадрата до одного из углов, если расстояние (точка, центр) < расстояние (в центре, ограничение)

+0

Не могли бы вы объяснить немного больше? –

+0

Подробнее можно найти здесь: https: //en.wikipedia.org/wiki/Taxicab_geometry обычно используется для расстояния дискретных чисел, но я думаю, что u мог бы использовать его тоже со значениями с плавающей запятой – MJCORBACHO

+1

Манхэттенское расстояние не имеет значения: это сумма расстояний вдоль каждой из осей координат. Две проблемы с этим: 1) вам нужно определить эти координатные оси; 2) Сумма не актуальна, это всего лишь максимум расстояния от центра вдоль двух осей координат. –

1

В Java нет встроенного метода, но это простая математика.

Уравнение линии:

a * x + b * y = c1 (1) 

Уравнение линии, параллельной это:

a * x + b * y = c2 (2) 

Уравнение двух линий перпендикулярно к ним относятся:

-b * x + a * y = c3 (3) 
-b * x + a * y = c4 (4) 

Это уравнения четырех ребер квадрата.

Определите коэффициенты уравнений выше (a, b, c1..c4) для вашего квадрата.

точка находится внутри квадрата тогда и только тогда оба из следующих условий:

min(c1, c2) <= a * x + b*y <= max(c1, c2) 
min(c3, c4) <= -b * x + a * y <= max(c3, c4) 
+0

Если мы не сможем найти какую-либо из координат, то? –

+0

Я понятия не имею, о чем вы спрашиваете. –

+0

Я хочу сказать, если я не знаю ни одной из координат, тогда я могу ее реализовать? –