我想确保我用来显示数组的方法不是一个我不知道的更好方法的尴尬解决方法。到目前为止,我所拥有的很多东西都感觉很尴尬。
对于间隔元素,我使用缓冲区将 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, …Run Code Online (Sandbox Code Playgroud) 无论如何,我正在尝试(这实际上是我的第一个manim程序)。
from manim import *
import copy
import numpy as np
import random
color_palette = [BLUE, GREEN, YELLOW, GREY_BROWN]
class TestPie(Scene):
def construct(self):
n_elements = 3
radius = 1
weights = np.random.rand(n_elements)
weights /= weights.sum()
angles = weights*np.pi*2
angles_offset = [0]+np.cumsum(weights*np.pi*2)[:-1].tolist()
arcs = [Arc(angles_offset[i], angles[i]) for i in range(n_elements)]
arcs2 = copy.deepcopy(arcs)
triangles = [Polygon(*[
# first element
(radius*np.cos(angles_offset[i]), radius*np.sin(angles_offset[i]),0),
(0, 0, 0), # second element
# third element
(radius*np.cos(angles_offset[(i+1)%n_elements]),
radius*np.sin(angles_offset[(i+1)%n_elements]), 0)], stroke_width=0)
for i in range(n_elements)]
lines …Run Code Online (Sandbox Code Playgroud) 最初的问题发布在 Reddit 上(https://www.reddit.com/r/manim/comments/lw3xs7/is_it_possible_to_run_manim_programmatically_and/)。我冒昧在这里问一下。
假设我想编写一个简单的 GUI 应用程序,用户可以在其中输入 LaTeX 代码,单击“动画”按钮,然后 manim 在后台渲染 mp4,最后将动画呈现给用户。
是否可以使用 manim 作为模块来实现这一点?例如,通过在先前准备好的 manim 场景中插入用户输入,然后调用类似my_scene.run(output=tempfile.mp4)? 或者我是否必须接受用户输入,将其写入新的 scene.py 文件并运行os.subprocess("manim", "scene.py", "MyScene", "-p")?
ORIGIN 中有一个正方形位置,我想将它移动到 UP*3 并使用以下代码片段同时缩放到 0.5:
sq = Square()
self.add(sq)
self.play(ApplyMethod(sq.scale, 0.5), ApplyMethod(sq.move_to, UP*3), run_time=5)
Run Code Online (Sandbox Code Playgroud)
但是,第一个被跳过,只有最后一个有效。
我知道创建另一个小方块并使用变换可以做到,但这会带来更多代码,是否有简单的解决方案?谢谢!
例如,许多不同的学科,物理学或经济学,需要一次显示多张图表,通常一个重叠显示,以展示某些冲击或事件如何影响不同的变量。这怎么能在 Manim 中完成?
有什么办法可以增加动画中特定线条的宽度?
我曾试图改变DEFAULT_STROKE_WIDTH中constants.py ,并设置stroke_width在CONFIG等于某个号码,但没有奏效。
这是我的代码的一部分。我的线只是沿着一组点的路径。
path = VMobject()
path.set_points_smoothly([*[coord(x,y) for x,y in self.tuples]])
path.set_color(RED)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
UPD
设置DEFAULT_STROKE_WIDTH在constants.py作品中,但它改变所有线条的宽度并不奇怪。
我刚开始学习 manim,我看到了我们在 example_scenes.py 中创建类的第一个视频。当我尝试运行它时,它说名称TextMobject未定义。我该怎么办?
我创建的类:
class FirstScene(Scene):
def construct(self):
text=TextMobject("text")
self.add(text)
Run Code Online (Sandbox Code Playgroud)
conda 提示中使用的代码:
python -m manim example_scenes.py FirstScene -w
Run Code Online (Sandbox Code Playgroud)
请检查此文件中的“FirstScene”类(此文件的最后一个类)我正在尝试运行。
我已经说明了由两个向量跨越的平行四边形,并且想在该平行四边形的区域中着色,我尝试这样做:
from manim import *
import numpy as np
class DrawParallelogram( Scene ):
def construct( self ):
o = np.array( [ 0, -2, 0 ] )
p1 = np.array( [ 3, 1, 0 ] ) # u
p2 = np.array( [ 1, 3, 0 ] ) # v
op1 = o + p1
op2 = o + p2
op3 = o + p1 + p2
v1 = Arrow( start = o, end = op1, buff = 0, color = RED …Run Code Online (Sandbox Code Playgroud) 我是学习 Python(以及一般编码)的新手,我一直在尝试按照
http://bhowell4.com/manic-install-tutorial-for-mac/
在我的 Mac 上安装 manim。一切都很顺利,直到我尝试使用 pip3 安装 virtualenv。正如指示所述,我输入了
pip3 install virtualenv
Run Code Online (Sandbox Code Playgroud)
进入终端(使用pycharm)。然后它回来了:
pip3 install virtualenv
Run Code Online (Sandbox Code Playgroud)
我试过查看来自不同资源的修复程序,但似乎都不起作用。我试过卸载并重新安装 python3、更新 brew、升级 brew 等。我不确定如何实施其他一些潜在的解决方案。非常感谢初学者可以理解的任何帮助!