Python OpenCV: уравнение конечных точек на основе пересечения линии - PullRequest
0 голосов
/ 26 января 2020

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

Код ниже - это 4 if утверждения, которые представляют различные способы рисования линии. Например, если x3 > oX and y3 > oY, то это означает, что направление линии идет вниз вправо. Причина, по которой я не использую операторы 2 if и рисую линию по всему экрану, заключается в том, что я пытаюсь показать путь линейного движущегося объекта от x3, y3 до пересечения экрана. Я определяю окончательную точку, используя формулу y=mx+c и вычисляя c, переставляя и используя x3 и y3, что эквивалентно x2 и y2 при математической речи. Затем я предполагаю, что конечная точка (px, py) будет пересекать либо верх, либо низ, в зависимости от того, в каком направлении движется линия, делая py = 480 или py = 0. Я проверяю, правильно ли я принял пересечение с помощью оператора if, чтобы убедиться, что значение px не выходит за границы экрана. Если значение находится за пределами экрана, я могу предположить, что значение px равно 0 или 640, а затем рассчитать значение py, используя формулу py = -m * px + c.

Проблема заключается в том, что я не могу кажется, получить точные значения, которые находятся в пределах окна 480x640. Я не верю, что моя математическая теория ошибочна, но если бы кто-то мог объяснить мне это, было бы здорово. Заявления if ниже. Большое спасибо!

            m = ((y3-oY)/(x3-oX))
            if x3 > oX and y3 > oY:
                c = y3 + m*x3
                py = 480
                px = (c - py)/m
                if px > 640:
                    px = 640
                    py = -m * px + c

            elif x3 < oX and y3 > oY:
                c = y3 + m*x3
                py = 480
                px = (c - py)/m
                if px < 0:
                    px = 0
                    py = -m * px + c

            elif x3 > oX and y3 < oY:
                c = y3 + m*x3
                py = 0
                px = (c - py)/m
                if px > 640:
                    px = 640
                    py = -m * px + c

            elif x3 < oX and y3 < oY:
                c = y3 + m*x3
                py = 0
                px = (c - py)/m
                if px > 0:
                    px = 0
                    py = -m * px + c
...