def anim7(svg): H, W = svg.get_size() cx, cy = W // 2, H // 2 # define gradient color color_id = 'myGradient' defs = svg.draw(draw_any('defs')) grad = svg.draw_node(defs, draw_any('radialGradient ', id=f'{color_id}')) stop_dict = {} stop_dict['offset'] = '2%' stop_dict['stop-color'] = 'gold' svg.draw_node(grad, draw_any('stop', None, **stop_dict)) stop_dict['offset'] = '90%' stop_dict['stop-color'] = 'red' svg.draw_node(grad, draw_any('stop', None, **stop_dict)) g = svg.draw(draw_tag('g')) svg.set_node(g, 'opacity', '1.0') r = 8 pt = [cx, cy] # color = 'red' color = f"url('#{color_id}')" draw_ball_movin(svg, g, r, W, H, start_pt=pt, step_x=-2, step_y=3, N=500, color=color, draw_path_line=True)
def anim10(svg): """moving ball bounce with a line""" H, W = svg.get_size() cx, cy = W // 2, H // 2 g = svg.draw(draw_tag('g')) svg.set_node(g, 'opacity', '1.0') wall_line = [2, -1.8, 1] # line parameters pts = draw_line_param_abc(wall_line, 0, W, 0, H) drawlinePoints(svg, pts, g, color='black') for i in range(50): pt = random_point(4, W - 5) # print(pt, type(pt)) vx = random.randint(1, 5) * [-1, 1][random.randrange(2)] vy = random.randint(1, 5) * [-1, 1][random.randrange(2)] res = get_math_bounce_parameter(wall_line, pt, vx, vy) perpend_pt, reflect_pt, inter_pt, path_line, reflect_line = res coords = [pt, inter_pt] if reflect_pt is not None: min_x, max_x = 0, W # min_y, max_y = 0, H far_pt = [0, 0] if reflect_pt[0] < inter_pt[0]: min_x = inter_pt[0] far_pt[0] = max_x far_pt[1] = get_line_ABC_y(reflect_line, far_pt[0]) else: max_x = inter_pt[0] far_pt[0] = min_x far_pt[1] = get_line_ABC_y(reflect_line, far_pt[0]) coords.append(far_pt) coords = np.asarray(coords) path = get_points_path(coords, False) draw_circle_path_anim(svg, g, path, radius=3, duration=len(coords) * 1.0, color='red')
def anim_Windmill(svg): H, W = svg.get_size() cx, cy = W // 2, H // 2 g = svg.draw(draw_tag('g')) svg.set_node(g, 'opacity', '1.0') drawNodeShape(svg, g) animateTransDict = {} animateTransDict['attributeName'] = 'transform' animateTransDict['attributeType'] = 'xml' animateTransDict['type'] = 'rotate' animateTransDict['from'] = f'0 {cx} {cy}' animateTransDict['to'] = f'360 {cx} {cy}' animateTransDict['dur'] = '8s' animateTransDict["repeatCount"] = "indefinite" # "5" addNodeAnitmation(svg, g, animateTransDict, elementName='animateTransform')
def anim8(svg): H, W = svg.get_size() cx, cy = W // 2, H // 2 g = svg.draw(draw_tag('g')) svg.set_node(g, 'opacity', '1.0') pt = (cx, cy) for i in range(100): r = random.randint(2, 8) # pt = (random.randint(2+r, W-2-r), random.randint(2+r, H-2-r)) sx = random.randint(1, 8) * [-1, 1][random.randrange(2)] sy = random.randint(1, 8) * [-1, 1][random.randrange(2)] # print('r, sx, sy=', r, sx, sy) draw_ball_movin(svg, g, r, W, H, start_pt=pt, step_x=sx, step_y=sy, N=800, color=random_color_hsv())
def anim6(svg): def draw_moving_circle(svg, g, radius, y, offset_x, color='red', duration=None): path = f'M{radius + offset_x} {y} H{W - (radius + offset_x)} H{radius + offset_x}' # svg.draw_node(g, draw_path(path, stroke_width=0.5, color='green')) draw_circle_path_anim(svg, g, path, radius, color, duration) H, W = svg.get_size() print('H, W=', H, W) cx, cy = W // 2, H // 2 g = svg.draw(draw_tag('g')) svg.set_node(g, 'opacity', '1.0') ver = cy r = 8 offset_x = 0 offset_y = 0 draw_moving_circle(svg, g, radius=r, y=ver, offset_x=offset_x) N = 20 for i in range(N): rand_r = random.randint(2, r) rand_ver = random.randint(offset_y + rand_r, H - 2 * rand_r - offset_y) draw_moving_circle(svg, g, radius=rand_r, y=rand_ver, offset_x=offset_x, duration=random.randint(3, 10), color=random_color_hsv())
def anim9(svg): """moving ball bounce with a line""" H, W = svg.get_size() cx, cy = W // 2, H // 2 g = svg.draw(draw_tag('g')) svg.set_node(g, 'opacity', '1.0') wall_line = [2, -1.8, 1] # line parameters pt = random_point(4, W - 5) print(pt, type(pt)) vx = -2 vy = 1 res = get_math_bounce_parameter(wall_line, pt, vx, vy) perpend_pt, reflect_pt, inter_pt, path_line, reflect_line = res # draw_line_param(svg, g, a, b, 0, W) pts = draw_line_param_abc(wall_line, 0, W, 0, H) drawlinePoints(svg, pts, g, color='black') svg.draw_node(g, draw_circle(pt[0], pt[1], 1, color='black')) svg.draw_node(g, draw_circle(perpend_pt[0], perpend_pt[1], 1, color='red')) svg.draw_node(g, draw_circle(reflect_pt[0], reflect_pt[1], 1, color='red')) svg.draw_node(g, draw_circle(inter_pt[0], inter_pt[1], 1, color='black')) svg.draw_node( g, draw_line(pt[0], pt[1], reflect_pt[0], reflect_pt[1], stroke_dasharray="2")) svg.draw_node( g, draw_line(inter_pt[0], inter_pt[1], reflect_pt[0], reflect_pt[1], stroke_dasharray="2")) if inter_pt is not None: min_x = min(pt[0], inter_pt[0]) max_x = max(pt[0], inter_pt[0]) min_y = min(pt[1], inter_pt[1]) max_y = min(pt[1], inter_pt[1]) pts = draw_line_param_abc(path_line, min_x, max_x, min_y, max_y) drawlinePoints(svg, pts, g, color='black') coords = [pt, inter_pt] if reflect_pt is not None: min_x, max_x = 0, W min_y, max_y = 0, H far_pt = [0, 0] if reflect_pt[0] < inter_pt[0]: min_x = inter_pt[0] far_pt[0] = max_x far_pt[1] = get_line_ABC_y(reflect_line, far_pt[0]) else: max_x = inter_pt[0] far_pt[0] = min_x far_pt[1] = get_line_ABC_y(reflect_line, far_pt[0]) pts = draw_line_param_abc(reflect_line, min_x, max_x, min_y, max_y) drawlinePoints(svg, pts, g, color='black') coords.append(far_pt) coords = np.asarray(coords) print('coords=', coords, coords.shape) path = get_points_path(coords, False) draw_circle_path_anim(svg, g, path, radius=6, duration=len(coords) * 1.0, color='red')
def addNodeAnitmation(svg, objectNode, animateDict, elementName='animate'): animate = svg.draw_node(objectNode, draw_tag(elementName)) svg.set_node_dict(animate, animateDict)
def set_title(self, title=None): if title is not None: self.draw(draw_tag('title', title))