多边形 set_width 和 set_height 无效
Polygon set_width and set_height not work
场景中有右半部分反比例函数(1/x),一开始我画了一个矩形(用多边形),左下角是(0, 0, 0),右上角是在 x=3.
的函数上
我覆盖了update_mobjects,并用函数上的某个点更新了矩形右上角的位置,但不起作用,宽度不减反增,请帮忙,谢谢!
我的代码如下:
class Chess(GraphScene):
CONFIG = {
"x_min": -5,
"x_max": 5,
"y_min": -5,
"y_max": 6,
"y_axis_height": 10,
"graph_origin": ORIGIN,
"x_labeled_nums": range(-5, 5, 1),
"y_labeled_nums": range(-5, 6, 1)
}
def construct(self):
self.setup_axes(animate=True)
if1r = self.get_graph(lambda x: 1 / x, color=YELLOW_D, x_min=1 / self.y_max, x_max=self.x_max)
self.play(FadeIn(if1r))
spt1 = self.input_to_graph_point(3, if1r)
sg = Polygon(np.array([0, 0, 0]), np.array([spt1[0], 0, 0]), spt1, np.array([0, spt1[1], 0]), fill_color=RED_D,
fill_opacity=1.0)
self.add(sg)
self.sg = sg
self.sva1 = 3
self.if1r = if1r
self.moving3()
def moving3(self):
self.always_update_mobjects = True
self.wait(10)
def update_mobjects(self, dt):
if (hasattr(self, "sva1") and self.sva1 > 1):
self.sva1 = self.sva1 - 0.01
spt2 = self.input_to_graph_point(self.sva1, self.if1r)
self.sg.set
self.sg.set_width(spt2[0], stretch=False, about_point=self.sg.get_corner(DOWN + LEFT))
self.sg.set_height(spt2[1], stretch=False, about_point=self.sg.get_corner(DOWN+LEFT))
是的,它有效,但你忘了在最后两行中更改 stretch=True
。
此外,self.sg.set
行还剩下。
如果你允许我发表评论,我认为你可以通过这种方式更好地控制:
更多示例here
class NewChess(GraphScene):
CONFIG = {
"x_min": -5,
"x_max": 5,
"y_min": -5,
"y_max": 6,
"y_axis_height": 10,
"graph_origin": ORIGIN,
"x_labeled_nums": range(-5, 5, 1),
"y_labeled_nums": range(-5, 6, 1),
"x_start":3,
"x_end":1
}
def get_rectangle_from_point(self,point):
return Polygon(
[0, 0, 0], #(0,0)
[point[0], 0, 0], #(x,0)
point, #(x,y)
[0, point[1], 0], #(0,y)
fill_color=RED_D,
fill_opacity=1.0
)
def construct(self):
self.setup_axes()
x_coord_tracker=ValueTracker(self.x_start)
if1r = self.get_graph(lambda x: 1 / x, color=YELLOW_D, x_min=1 / self.y_max, x_max=self.x_max)
spt1 = self.input_to_graph_point(x_coord_tracker.get_value(), if1r)
sg = self.get_rectangle_from_point(spt1)
self.play(FadeIn(if1r))
self.play(FadeIn(sg))
def update_rectangle(rectangle):
new_coord=self.input_to_graph_point(x_coord_tracker.get_value(), if1r)
rectangle.become(self.get_rectangle_from_point(new_coord))
return rectangle
sg.add_updater(update_rectangle)
self.add(sg) # Add object again
self.play(
x_coord_tracker.set_value,self.x_end,
rate_func=linear,
run_time=2
)
self.wait()
场景中有右半部分反比例函数(1/x),一开始我画了一个矩形(用多边形),左下角是(0, 0, 0),右上角是在 x=3.
的函数上我覆盖了update_mobjects,并用函数上的某个点更新了矩形右上角的位置,但不起作用,宽度不减反增,请帮忙,谢谢!
我的代码如下:
class Chess(GraphScene):
CONFIG = {
"x_min": -5,
"x_max": 5,
"y_min": -5,
"y_max": 6,
"y_axis_height": 10,
"graph_origin": ORIGIN,
"x_labeled_nums": range(-5, 5, 1),
"y_labeled_nums": range(-5, 6, 1)
}
def construct(self):
self.setup_axes(animate=True)
if1r = self.get_graph(lambda x: 1 / x, color=YELLOW_D, x_min=1 / self.y_max, x_max=self.x_max)
self.play(FadeIn(if1r))
spt1 = self.input_to_graph_point(3, if1r)
sg = Polygon(np.array([0, 0, 0]), np.array([spt1[0], 0, 0]), spt1, np.array([0, spt1[1], 0]), fill_color=RED_D,
fill_opacity=1.0)
self.add(sg)
self.sg = sg
self.sva1 = 3
self.if1r = if1r
self.moving3()
def moving3(self):
self.always_update_mobjects = True
self.wait(10)
def update_mobjects(self, dt):
if (hasattr(self, "sva1") and self.sva1 > 1):
self.sva1 = self.sva1 - 0.01
spt2 = self.input_to_graph_point(self.sva1, self.if1r)
self.sg.set
self.sg.set_width(spt2[0], stretch=False, about_point=self.sg.get_corner(DOWN + LEFT))
self.sg.set_height(spt2[1], stretch=False, about_point=self.sg.get_corner(DOWN+LEFT))
是的,它有效,但你忘了在最后两行中更改 stretch=True
。
此外,self.sg.set
行还剩下。
如果你允许我发表评论,我认为你可以通过这种方式更好地控制: 更多示例here
class NewChess(GraphScene):
CONFIG = {
"x_min": -5,
"x_max": 5,
"y_min": -5,
"y_max": 6,
"y_axis_height": 10,
"graph_origin": ORIGIN,
"x_labeled_nums": range(-5, 5, 1),
"y_labeled_nums": range(-5, 6, 1),
"x_start":3,
"x_end":1
}
def get_rectangle_from_point(self,point):
return Polygon(
[0, 0, 0], #(0,0)
[point[0], 0, 0], #(x,0)
point, #(x,y)
[0, point[1], 0], #(0,y)
fill_color=RED_D,
fill_opacity=1.0
)
def construct(self):
self.setup_axes()
x_coord_tracker=ValueTracker(self.x_start)
if1r = self.get_graph(lambda x: 1 / x, color=YELLOW_D, x_min=1 / self.y_max, x_max=self.x_max)
spt1 = self.input_to_graph_point(x_coord_tracker.get_value(), if1r)
sg = self.get_rectangle_from_point(spt1)
self.play(FadeIn(if1r))
self.play(FadeIn(sg))
def update_rectangle(rectangle):
new_coord=self.input_to_graph_point(x_coord_tracker.get_value(), if1r)
rectangle.become(self.get_rectangle_from_point(new_coord))
return rectangle
sg.add_updater(update_rectangle)
self.add(sg) # Add object again
self.play(
x_coord_tracker.set_value,self.x_end,
rate_func=linear,
run_time=2
)
self.wait()