Все, что вы делаете, эффективно «использует уравнения линий», поэтому я не уверен, что делать с этим условием. Я предполагаю, что вы просто хотите, чтобы простые неравенства проверяли, в какой области находится случайная точка (x,y)
, поэтому я покажу вам, как это сделать.
Исходя из вашего вопроса, звучит так, будто у вас всегда есть параллелограмм, поэтому давайте предположим, что это (0,0)
, (a,b)
, (c,d)
и (a+c,b+d)
, что немного облегчает понимание. Чтобы исправить свою ментальную картину, представьте, что (a,b)
примерно "справа" от (0,0)
, а (c,d)
примерно "выше" (0,0)
. Тогда уравнениями для «горизонтальных» линий будут -bx+ay=0
и -bx+ay=-bc+ad
, так что вы получите три варианта, в зависимости от того, как -bx+cy
сравнивается с 0
и -bc+ad
:
// Assuming -bc+ad is positive
-bx+ay < 0 // it's in the "bottom row"
0 < -bx+ay < -bc+ad // it's in the "middle row"
-bc+ad < -bx+ay // it's in the "top row"
Аналогично, уравнения для «вертикальных» линий - это dx-cy=0
и dx-cy=da-bc
, поэтому три возможности, в зависимости от того, как dx-cy
сравнивается с 0
и da-cb
:
// Still assuming ad-bc is positive
dx-cy < 0 // it's in the "left column"
0 < dx-cy < da-cb // it's in the "middle column"
da-cb < dx-cy // it's in the "right column"
Конечно, если da-cb
отрицательно, то три варианта в каждом случае "меньше чем da-cb
", "между da-cb
и 0
" и "больше чем 0
" вместо этого. Наконец, если равенство когда-либо выполнено, то точка (x,y)
на самом деле на одной из линий, а не в одной из областей.