【问题标题】:How to create animations of elliptic curves in manim?如何在manim中创建椭圆曲线的动画?
【发布时间】:2022-06-18 21:21:46
【问题描述】:

我正在玩 manim,我想创建一个带有椭圆曲线的动画。这是我的代码,在文件functions.py中:

from manim import *

class EllipticCurve(Scene):

    def construct(self):
        basic_ec = FunctionGraph(
           lambda x: x**1.5 - x**0.5 + 19**0.5
        )

        self.play(Create(basic_ec))

当我执行这个命令manim -pql functions.py EllipticCurve时,我得到以下错误:

ValueError: array must not contain infs or NaNs

我相信FunctionGraph 方法需要一个函数,而不是曲线,但我怎样才能动画和绘制椭圆曲线?还有其他方法吗?我错过了什么吗?

【问题讨论】:

  • lambda x: x**1.5 - x**0.5 + 19**0.5 不是椭圆曲线。

标签: python elliptic-curve manim


【解决方案1】:

您正确地将函数传递给FunctionGraph,问题是如果您没有为绘图明确指定x_range,Manim 将选择范围[-config.frame_x_radius, config.frame_x_radius](也就是说,它跨越整个宽度 框架的;默认情况下从 -7.11 到 +7.11)。

在你的函数中插入负值是有问题的,所以 Manim 抱怨道。将x_range=[0, 7] 传递给FunctionGraph,或者查看ImplicitFunction(在我看来,这对于处理椭圆曲线更有用)。

最后一个提示:为FunctionGraph 进行合理的缩放可能有点棘手,您可能需要考虑创建一个Axes mobject,然后使用相应的Axes.plotAxes.plot_implicit 方法。

【讨论】:

  • 感谢您的回答。我也需要绘制负值。有没有办法用 Weierstrass 形式绘制 EC:y^2 = x^3 - x + 19
  • @Alejandro 是的,这就是链接的ImplicitFunction 所做的。
【解决方案2】:

以下内容对我有用:

#!/usr/bin/env python
"""
# python -m manim --quality l simple_ec.py EllipticCurve1 -p
"""
from manim import *

class EllipticCurve(Scene):
    def construct(self):
        ax = Axes(x_range=[-3.2, 6.2, 1], y_range=[-21, 21, 10]
                  , x_length=14         , y_length=7.5
                  , color=BLUE
                  , x_axis_config={"numbers_to_include": range(-3, 6 + 1, 1),
                                   "font_size": 24,}
                  , y_axis_config={"numbers_to_include": range(-20, 20 + 10, 10),
                                   "font_size": 24,}
                  , tips=False)
        
        a = ax.plot_implicit_curve(lambda x, y: -y**2 + x**3 - x + 19
                                   , color=YELLOW)

        plane = NumberPlane(x_range=[-3.2, 6.2, 1], y_range=[-21, 21, 10]
                            , x_length=14         , y_length=7.5
                            , color=GRAY)

        self.add(ax, a, plane)
        self.wait(5)
        

它使用隐式绘图,轴对象ax 的方法plot_implicit_curve,并且正在生成:

注意:想要的椭圆曲线是从 cmets 中提取的。它是曲线 y² = x³ - x + 19 。 (当然,我们不能通过从 R.H.S 中“逐项”提取平方根来隔离 y - 无论这些项的符号是什么......)曲线(从有理数上看)没有扭转点,它的等级是 1,生成器是 (2, 5)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    相关资源
    最近更新 更多