2018-12-24 12:37:51 -08:00
|
|
|
from manimlib.constants import *
|
|
|
|
from manimlib.mobject.geometry import Square
|
2020-06-04 17:17:38 -07:00
|
|
|
from manimlib.mobject.types.surface_mobject import ParametricSurface
|
2018-12-24 12:37:51 -08:00
|
|
|
from manimlib.mobject.types.vectorized_mobject import VGroup
|
2018-04-01 10:45:41 -07:00
|
|
|
|
|
|
|
|
2020-06-04 15:41:20 -07:00
|
|
|
# Sphere, cylinder, cube, prism
|
2018-08-15 16:23:29 -07:00
|
|
|
|
|
|
|
class Sphere(ParametricSurface):
|
|
|
|
CONFIG = {
|
2020-06-04 17:17:38 -07:00
|
|
|
"resolution": (96, 48),
|
2018-08-22 21:23:24 -07:00
|
|
|
"radius": 1,
|
2020-06-04 17:17:38 -07:00
|
|
|
"u_range": (0, TAU),
|
|
|
|
"v_range": (0, PI),
|
2018-08-15 16:23:29 -07:00
|
|
|
}
|
2018-04-01 10:45:41 -07:00
|
|
|
|
2018-08-15 16:23:29 -07:00
|
|
|
def func(self, u, v):
|
2020-06-04 15:41:20 -07:00
|
|
|
return self.radius * np.array([
|
2020-06-04 17:17:38 -07:00
|
|
|
np.cos(u) * np.sin(v),
|
|
|
|
np.sin(u) * np.sin(v),
|
|
|
|
np.cos(v)
|
2018-08-15 16:23:29 -07:00
|
|
|
])
|
2018-04-01 10:45:41 -07:00
|
|
|
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2018-08-15 16:23:29 -07:00
|
|
|
class Cube(VGroup):
|
2018-04-01 10:45:41 -07:00
|
|
|
CONFIG = {
|
2018-04-06 13:58:59 -07:00
|
|
|
"fill_opacity": 0.75,
|
|
|
|
"fill_color": BLUE,
|
|
|
|
"stroke_width": 0,
|
|
|
|
"side_length": 2,
|
2018-04-01 10:45:41 -07:00
|
|
|
}
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2020-02-11 19:55:00 -08:00
|
|
|
def init_points(self):
|
2018-04-01 10:45:41 -07:00
|
|
|
for vect in IN, OUT, LEFT, RIGHT, UP, DOWN:
|
2018-08-22 21:23:24 -07:00
|
|
|
face = Square(
|
|
|
|
side_length=self.side_length,
|
|
|
|
shade_in_3d=True,
|
2018-08-15 16:23:29 -07:00
|
|
|
)
|
|
|
|
face.flip()
|
2018-04-06 13:58:59 -07:00
|
|
|
face.shift(self.side_length * OUT / 2.0)
|
2018-08-15 16:23:29 -07:00
|
|
|
face.apply_matrix(z_to_vector(vect))
|
2018-04-01 10:45:41 -07:00
|
|
|
|
|
|
|
self.add(face)
|
|
|
|
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2018-04-01 10:45:41 -07:00
|
|
|
class Prism(Cube):
|
|
|
|
CONFIG = {
|
2018-04-06 13:58:59 -07:00
|
|
|
"dimensions": [3, 2, 1]
|
2018-04-01 10:45:41 -07:00
|
|
|
}
|
2018-04-06 13:58:59 -07:00
|
|
|
|
2020-02-11 19:55:00 -08:00
|
|
|
def init_points(self):
|
|
|
|
Cube.init_points(self)
|
2018-04-01 10:45:41 -07:00
|
|
|
for dim, value in enumerate(self.dimensions):
|
2018-04-06 13:58:59 -07:00
|
|
|
self.rescale_to_fit(value, dim, stretch=True)
|