Exemple #1
0
 def get_vector(self, point, **kwargs):
     output = np.array(self.func(point))
     norm = get_norm(output)
     if norm == 0:
         output *= 0
     else:
         output *= self.length_func(norm) / norm
     vector_config = dict(self.vector_config)
     vector_config.update(kwargs)
     vect = Vector(output, **vector_config)
     vect.shift(point)
     fill_color = rgb_to_color(
         self.rgb_gradient_function(np.array([norm]))[0])
     vect.set_color(fill_color)
     return vect
Exemple #2
0
 def get_vector(self, point, **kwargs):
     output = np.array(self.func(point))
     norm = get_norm(output)
     if norm == 0:
         output *= 0
     else:
         output *= self.length_func(norm) / norm
     vector_config = dict(self.vector_config)
     vector_config.update(kwargs)
     vect = Vector(output, **vector_config)
     vect.shift(point)
     fill_color = rgb_to_color(
         self.rgb_gradient_function(np.array([norm]))[0]
     )
     vect.set_color(fill_color)
     return vect
Exemple #3
0
    def __init__(self, func, **kwargs):
        if not hasattr(self, "args"):
            self.args = serialize_args([func])
        if not hasattr(self, "config"):
            self.config = serialize_config({
                **kwargs,
            })
        VGroup.__init__(self, **kwargs)
        self.func = func
        dt = self.dt

        start_points = self.get_start_points(
            **self.start_points_generator_config)
        for point in start_points:
            points = [point]
            for t in np.arange(0, self.virtual_time, dt):
                last_point = points[-1]
                points.append(last_point + dt * func(last_point))
                if get_norm(last_point) > self.cutoff_norm:
                    break
            line = VMobject()
            step = max(1, int(len(points) / self.n_anchors_per_line))
            line.set_points_smoothly(points[::step])
            self.add(line)

        self.set_stroke(self.stroke_color, self.stroke_width)

        if self.color_by_arc_length:
            len_to_rgb = get_rgb_gradient_function(
                self.min_arc_length,
                self.max_arc_length,
                colors=self.colors,
            )
            for line in self:
                arc_length = line.get_arc_length()
                rgb = len_to_rgb([arc_length])[0]
                color = rgb_to_color(rgb)
                line.set_color(color)
        elif self.color_by_magnitude:
            image_file = get_color_field_image_file(
                lambda p: get_norm(func(p)),
                min_value=self.min_magnitude,
                max_value=self.max_magnitude,
                colors=self.colors,
            )
            self.color_using_background_image(image_file)
Exemple #4
0
    def __init__(self, func, **kwargs):
        VGroup.__init__(self, **kwargs)
        self.func = func
        dt = self.dt

        start_points = self.get_start_points(
            **self.start_points_generator_config
        )
        for point in start_points:
            points = [point]
            for t in np.arange(0, self.virtual_time, dt):
                last_point = points[-1]
                points.append(last_point + dt * func(last_point))
                if get_norm(last_point) > self.cutoff_norm:
                    break
            line = VMobject()
            step = max(1, int(len(points) / self.n_anchors_per_line))
            line.set_points_smoothly(points[::step])
            self.add(line)

        self.set_stroke(self.stroke_color, self.stroke_width)

        if self.color_by_arc_length:
            len_to_rgb = get_rgb_gradient_function(
                self.min_arc_length,
                self.max_arc_length,
                colors=self.colors,
            )
            for line in self:
                arc_length = line.get_arc_length()
                rgb = len_to_rgb([arc_length])[0]
                color = rgb_to_color(rgb)
                line.set_color(color)
        elif self.color_by_magnitude:
            image_file = get_color_field_image_file(
                lambda p: get_norm(func(p)),
                min_value=self.min_magnitude,
                max_value=self.max_magnitude,
                colors=self.colors,
            )
            self.color_using_background_image(image_file)
Exemple #5
0
 def get_value(self):
     r = self.r_slider.get_value() / 255
     g = self.g_slider.get_value() / 255
     b = self.b_slider.get_value() / 255
     alpha = self.a_slider.get_value()
     return color_to_rgba(rgb_to_color((r, g, b)), alpha=alpha)
def tweak_color(color1, color2, weight=0.3):
    """Return a weighted-average of two colors."""
    weight = np.clip(weight, 0, 1)
    tweaked_rgb = weight * color_to_rgb(color2) + (
        1 - weight) * color_to_rgb(color1)
    return rgb_to_color(tweaked_rgb)