mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
|
|
from animation.transform import Transform
|
|
from mobject import Mobject
|
|
from mobject.tex_mobject import TextMobject
|
|
from mobject.image_mobject import MobjectFromPixelArray
|
|
from topics.geometry import Circle
|
|
from topics.three_dimensions import Sphere
|
|
from scene import Scene
|
|
|
|
from helpers import *
|
|
|
|
## Warning, much of what is in this class
|
|
## likely not supported anymore.
|
|
|
|
class LogoGeneration(Scene):
|
|
CONFIG = {
|
|
"radius" : 1.5,
|
|
"inner_radius_ratio" : 0.55,
|
|
"circle_density" : 100,
|
|
"circle_blue" : "skyblue",
|
|
"circle_brown" : DARK_BROWN,
|
|
"circle_repeats" : 5,
|
|
"sphere_density" : 50,
|
|
"sphere_blue" : DARK_BLUE,
|
|
"sphere_brown" : LIGHT_BROWN,
|
|
"interpolation_factor" : 0.3,
|
|
"frame_duration" : 0.03,
|
|
"run_time" : 3,
|
|
}
|
|
def construct(self):
|
|
digest_config(self, {})
|
|
## Usually shouldn't need this...
|
|
self.frame_duration = self.CONFIG["frame_duration"]
|
|
##
|
|
digest_config(self, {})
|
|
circle = Circle(
|
|
density = self.circle_density,
|
|
color = self.circle_blue
|
|
)
|
|
circle.repeat(self.circle_repeats)
|
|
circle.scale(self.radius)
|
|
sphere = Sphere(
|
|
density = self.sphere_density,
|
|
color = self.sphere_blue
|
|
)
|
|
sphere.scale(self.radius)
|
|
sphere.rotate(-np.pi / 7, [1, 0, 0])
|
|
sphere.rotate(-np.pi / 7)
|
|
iris = Mobject()
|
|
iris.interpolate(
|
|
circle, sphere,
|
|
self.interpolation_factor
|
|
)
|
|
for mob, color in [(iris, self.sphere_brown), (circle, self.circle_brown)]:
|
|
mob.highlight(color, lambda (x, y, z) : x < 0 and y > 0)
|
|
mob.highlight(
|
|
"black",
|
|
lambda point: np.linalg.norm(point) < \
|
|
self.inner_radius_ratio*self.radius
|
|
)
|
|
self.name_mob = TextMobject("3Blue1Brown").center()
|
|
self.name_mob.highlight("grey")
|
|
self.name_mob.shift(2*DOWN)
|
|
|
|
self.play(Transform(
|
|
circle, iris,
|
|
run_time = self.run_time
|
|
))
|
|
self.frames = drag_pixels(self.frames)
|
|
self.save_image(IMAGE_DIR)
|
|
self.logo = MobjectFromPixelArray(self.frames[-1])
|
|
self.add(self.name_mob)
|
|
self.dither()
|
|
|
|
|