Линия к линии пересекается с перевернутой осью Y пигамей - PullRequest
2 голосов
/ 08 мая 2019

https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line

https://www.youtube.com/watch?v=TOEi6T2mtHo

Я пытался реализовать этот метод в своем коде, но безрезультатно, я действительно считаю, что проблема заключается в инвертированной оси Y в Pygame иличто-то еще скрывается под моим взглядом?Какие-либо предложения?

Вот мой код:

        x1 = other.pos1[0]
        y1 = other.pos1[1]
        x2 = other.pos2[0]
        y2 = other.pos2[1]

        x3 = self.pos1[0]
        y3 = self.pos1[1]
        x4 = self.pos2[0]
        y4 = self.pos2[1]

        den = (x1 - x2) * (y3 - y4) - (y1 * y2 * (x3 - x4))

        if den == 0:
            return

        t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / den

        u = -(((x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3))) / den

        if t > 0 and t < 1 and u > 0:
            point = (x3 + u * (x4 - x3), y3 + u * (y4 - y3))

            pygame.gfxdraw.filled_circle(surface, point[0], point[1], 3, (255, 0, 0))

            return point

        else:
            return

1 Ответ

1 голос
/ 09 мая 2019

Знаменатель для пересечения линии линия вычисляется по формуле:

(x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4).

Итак, следующее выражение неверно:

den = (x1 - x2) * (y3 - y4) - (y1 * y2 * (x3 - x4))

Должно быть:

den = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...