gpt4 book ai didi

arrays - 有没有更好的方法来可视化数组?

转载 作者:行者123 更新时间:2023-12-03 19:10:21 25 4
gpt4 key购买 nike

我想确保我用来显示数组的方法对于我不知道的更好方法来说不是一个尴尬的解决方法。到目前为止,我所拥有的很多东西都感觉很尴尬。

对于间距元素 我使用缓冲区将 TextMobject 数组的每个元素设置为 .next_to 右侧的前一个元素。有更好的方法吗?

对于元素周围的框我打算分别绘制数组的整个宽度的顶线和底线,然后在元素之间绘制垂直线。我不打算关心以不同的方式绘制这些框的动画,尽管我确实计划使用现有的工具来突出显示元素。有更好的方法吗?

到目前为止,这是我的“hello world”代码。任何建议/改进都非常受欢迎!

class ExampleArray(Scene):
def construct(self):
n = 6
labels = TextMobject(* ["[" + str(index) + "]" for index in range(n)] )
text = TextMobject( *[str(random.randint(0,10)) for i in range(n) ] )

# space it out
for i in range(1,len(text)):
text[i].next_to(text[i-1], RIGHT, buff = 0.8)

text.move_to(ORIGIN)


for i in range(len(labels)):
labels[i].scale(0.5)
labels[i].next_to( text[i], DOWN, buff = 0.5)

# can I just make a copy of top_line?
top_line = Line(text.get_left() + LEFT, text.get_right() + RIGHT)
bottom_line = Line(text.get_left() + LEFT, text.get_right() + RIGHT)
top_line.next_to(text, UP)
bottom_line.next_to(text, DOWN)

self.add(labels)
self.add(top_line, bottom_line)

for i in range(len(text)):
self.play(Write(text[i]))
self.wait(0.1)

最佳答案

这就是我会做的方式。我建议你考虑以下几点:

  • 当您不知道是否必须重用代码时,请始终将代码模块化。
  • 垂直阅读总是比水平阅读更好。
  • 避免使用索引(真正需要时使用)
  • 使用 CONFIG字典来概括您将在整个场景中使用的变量。
  • 更短的代码不是更好的代码的代名词,必须始终保持平衡:
  • 易读
  • 易于维护
  • 易于扩展

  • class ExampleArray2(Scene):
    CONFIG = {
    "array_len": 6,
    "random_seed": 1, # with this you force to manim use other numbers
    # Change the random_seed to other number every time you want other
    # random numbers
    }
    def construct(self):
    labels = TextMobject(*[
    f"[{index}]"
    for index in range(self.array_len)
    ])
    text = TextMobject(*[
    str(random.randint(0,10))
    for i in range(self.array_len)
    ])
    # space it out
    text.arrange(RIGHT,buff=0.8)
    # See: https://github.com/3b1b/manim/blob/master/manimlib/mobject/mobject.py#L936

    for label,t in zip(labels,text): # I like to avoid using indexes
    label.scale(0.5)
    label.next_to(t,DOWN,buff=0.5)

    up_and_down_line = self.get_up_and_down_line(
    VGroup(text,labels),
    buff=0.7, # Distance between numbers and lines
    scale=1.4 # Scale of the line
    )

    self.play(
    *list(map(lambda x: Write(x,run_time=2),[text,labels])),
    *list(map(GrowFromCenter,up_and_down_line))
    )
    self.wait()

    def get_long_line(self,mob,y_direction,buff=0.5,scale=1):
    return Line(
    mob.get_corner(y_direction + LEFT),
    mob.get_corner(y_direction + RIGHT)
    ).shift(y_direction*buff).scale(scale)

    def get_up_and_down_line(self,mob,**kwargs):
    return VGroup(
    self.get_long_line(mob,UP,**kwargs),
    self.get_long_line(mob,DOWN,**kwargs)
    )

    enter image description here

    关于arrays - 有没有更好的方法来可视化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62409364/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com