def get_vis_polygon(self, pos: Vec2, r: float, alpha: float, thetta: float) -> PolyLine: n_rays = 10 angles = np.linspace(-thetta + alpha, thetta + alpha, n_rays) p2s = [ Vec2(r, 0).rotate(angle, degrees=True).add(pos) for angle in angles ] ps = [pos.copy()] for p2 in p2s: p1, pi = self.intersected_segment(pos, p2) ps.append(pi) return PolyLine(ps)
def intersected_segment(self, p1: Vec2, p2: Vec2) -> tuple: ps = [p2.copy()] for pl in self.obstacles: ps += pl.intersect_segment(p1, p2) ps = _sortreduce_by_distance(ps, p1) return (p1.copy(), ps[0])