rendered paste body dx = self.v[0] - r[0] dy = self.v[1] - r[1] da = self.cshape.end[0] - self.cshape.start[0] db = self.cshape.end[1] - self.cshape.start[1] if (da * dy) - (db * dx) != 0: s = (dx * (self.cshape.start[1] - (self.pos[1] - r[1])) + dy * (self.pos[0] - r[0]) - self.cshape.start[0]) / (da * dy - db * dx) t = (da * ((self.pos[1] - r[1]) - self.cshape.start[1]) + dy * (self.cshape.start[0] - (self.pos[0] - r[0]))) / (db * dx - da * dy) if (s >= 0 and s <= 1 and t >= 0 and t <= 1): self.pos[0] -= d[0] - r[0] self.pos[1] -= d[1] - r[1] v *= cos(abs(lineAngle) - abs(vAngle)) self.v[0] = round(abs(cos(lineAngle) * v) * cmp(self.v[0], 0),6) self.v[1] = round(abs(sin(lineAngle) * v) * cmp(self.v[1], 0),6)