Возврат точки пересечения

Здраствуйте, мне нужно понять как реализовать возврат точки сопрекосновения. Я создаю свой простой 2д движок и без возврата вершин мне никак нельзя. Я знаю как сделать проверку на нахождение определённой точки внутри 2д объекта благодаря этому посту. Теперь мне нужно вернуть точку сопрекасания со стороной 2д объекта.
В этом и суть моего вопроса. У всех моих объектов есть вершины,они находятся в списке "p"- сократил от polygons В этом списке находятся 4 вершины, по ним я выстаиваю полигон :

pygame.draw.polygon(sccreen,obj.color,obj.p,obj.fill)

obj.fill-это я использую для обозначения граней полигона (0-грани не выресовываются)
obj1 - это список платформ
obj2- это "персонаж" Все объекты имеют свой квадрат - Rect(x,y,w,h) Я создал его для того чтобы я мог вращать полигоны от центра родительского объекта. А вот как я это написал:

self.rr=mt.sqrt(self.w**2+self.h**2)

Так же каждый из объектов имеет свой градус наклона вершин:

self.ang=0#сокращение от angle

#mt-это math
def rot(obj):
    for p in obj.p:
        rx=obj.r.center[0]-p[0]
        ry=obj.r.center[1]-p[1]
        d=(180/mt.pi)*-mt.atan2(-ry,rx)
        p[0]=obj.r.center[0]+mt.cos(mt.radians(obj.ang+d))*obj.rr
        p[1]=obj.r.center[1]+mt.sin(mt.radians(obj.ang+d))*obj.rr
def collision(obj1,obj2):
    for b in obj1:
        for v in b.p:
            for p in obj2.p:
                if is_point_in_triangle(b.p[0], b.p[1], b.p[2],p) or is_point_in_triangle(b.p[0], b.p[3], b.p[2],p):
                    obj2.r.centery=p[1]+(-v[1]+p[1])

Как понимаете функция collision работает не неправильно. Мне нужно сделать аналог уже встроенного в pygame распознавания колизий, как sprite.collide_rect(obj2, obj1), но чтобы он возвращял все вершины на то положение, где они были во время сопрекасновения.


Ответы (0 шт):