You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.6 KiB
61 lines
1.6 KiB
from manim import *
|
|
|
|
|
|
class PolygonOnAxes(Scene):
|
|
def get_rectangle_corners(self, bottom_left, top_right):
|
|
return [
|
|
(top_right[0], top_right[1]),
|
|
(bottom_left[0], top_right[1]),
|
|
(bottom_left[0], bottom_left[1]),
|
|
(top_right[0], bottom_left[1]),
|
|
]
|
|
|
|
def construct(self):
|
|
ax = Axes(
|
|
x_range=[0, 10],
|
|
y_range=[0, 10],
|
|
x_length=6,
|
|
y_length=6,
|
|
axis_config={"include_tip": False},
|
|
)
|
|
|
|
t = ValueTracker(5)
|
|
k = 25
|
|
|
|
graph = ax.plot(
|
|
lambda x: k / x,
|
|
color=YELLOW_D,
|
|
x_range=[k / 10, 10.0, 0.01],
|
|
use_smoothing=False,
|
|
)
|
|
|
|
def get_rectangle():
|
|
polygon = Polygon(
|
|
*[
|
|
ax.c2p(*i)
|
|
for i in self.get_rectangle_corners(
|
|
(0, 0), (t.get_value(), k / t.get_value())
|
|
)
|
|
]
|
|
)
|
|
polygon.stroke_width = 1
|
|
polygon.set_fill(BLUE, opacity=0.5)
|
|
polygon.set_stroke(YELLOW_B)
|
|
return polygon
|
|
|
|
polygon = always_redraw(get_rectangle)
|
|
|
|
dot = Dot()
|
|
dot.add_updater(
|
|
lambda x: x.move_to(
|
|
ax.c2p(
|
|
t.get_value(),
|
|
k / t.get_value())))
|
|
dot.set_z_index(10)
|
|
|
|
self.add(ax, graph, dot)
|
|
self.play(Create(polygon))
|
|
self.play(t.animate.set_value(10))
|
|
self.play(t.animate.set_value(k / 10))
|
|
self.play(t.animate.set_value(5))
|