Возврат точки пересечения
Здраствуйте, мне нужно понять как реализовать возврат точки сопрекосновения. Я создаю свой простой 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), но чтобы он возвращял все вершины на то положение, где они были во время сопрекасновения.