如何在Manim中的数字线上添加我自己的数字?

发布于 2025-02-10 12:15:14 字数 679 浏览 0 评论 0原文

我想在Manim中的数字行中添加自己的数字,因为现在我所能做的就是给出一系列数字,但我想添加诸如PI,Squareroot,Migy数字之类的数字,例如我自己的数字列表而不是生成的数字列表通过函数范围。正确的方法是什么?请帮忙。

这是我的代码:

class NumbersClass(Scene):
    def construct(self):
        num_line = NumberLine(x_range=[-3, 3, 0.5],
                                   unit_size=2,
                                   color=ORANGE,
                                   include_numbers=True,
                                   decimal_number_config={
                                       "num_decimal_places": 1},
                                   )

       
        self.play(DrawBorderThenFill(num_line), run_time=2)
        self.wait(duration=1)

I want to add my own numbers on Number Line in Manim, for now all i can do is just give a range of numbers but i want to add numbers like PI, SquareRoots, Imaginary Numbers, like a list of my own numbers not a generated range by a function. what is the right way to do it? please help.

This is my code:

class NumbersClass(Scene):
    def construct(self):
        num_line = NumberLine(x_range=[-3, 3, 0.5],
                                   unit_size=2,
                                   color=ORANGE,
                                   include_numbers=True,
                                   decimal_number_config={
                                       "num_decimal_places": 1},
                                   )

       
        self.play(DrawBorderThenFill(num_line), run_time=2)
        self.wait(duration=1)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初见 2025-02-17 12:15:14

我知道您的问题正在处理输入。因此,您可以将它们作为字符串输入并将其转换为特定类型,例如:

import math


def get_sqrt(input_number: str) -> float:
    """Return square root of input_number if in the form "sqrt(number)" (e.g. sqrt(2))"""
    value = float(input_number[input_number.find("(") + 1 : input_number.find(")")])
    return math.sqrt(value)


def get_pi(input_number: str) -> float:
    """Return pi value if input_number in the form "pi" """
    return math.pi


def get_division(input_number: str) -> float:
    """Return division value if input_number in the form "a/b" (e.g. 2/5)"""
    value = float(input_number.split("/")[0]) / float(input_number.split("/")[1])

    return value


def get_complex(input_number: str) -> complex:
    """Return complex value of input_number in the form "a+bj" (e.g. 1+2j)"""
    return complex(input_number)


def get_correct_number(input_number: str):
    str_patterns = {"sqrt": get_sqrt, "pi": get_pi, "/": get_division, "j": get_complex}

    for str_pattern, func in str_patterns.items():
        if str_pattern in input_number:
            return func(input_number)

    return float(input_number)


if __name__ == "__main__":
    # If you want to fill your list of values
    my_own_list = ["sqrt(2)", "pi", "1/2", "0", "4", "-4"]
    my_values = []

    print("Number -> Type")
    for input_number in my_own_list:
        number = get_correct_number(input_number)
        print(number, "->", type(number))
        my_values.append(number)

    print("\nList of converted values: ")
    print(my_values)

    # If you want to input values manually
    dont_stop = True
    my_values = []

    print("\nManual input\n")
    while dont_stop:
        input_number = input("Enter your number: ")
        if input_number:
            number = get_correct_number(input_number)
            print("Number -> Type")
            print(number, "->", type(number))
            my_values.append(number)
        else:
            dont_stop = False

    print("\nList of converted values: ")
    print(my_values)

在这里,终端上输入/输出的一个例子:

Number -> Type
1.4142135623730951 -> <class 'float'>
3.141592653589793 -> <class 'float'>
0.5 -> <class 'float'>
0.0 -> <class 'float'>
4.0 -> <class 'float'>
-4.0 -> <class 'float'>

List of converted values:
[1.4142135623730951, 3.141592653589793, 0.5, 0.0, 4.0, -4.0]

Manual input

Enter your number: 1
Number -> Type
1.0 -> <class 'float'>
Enter your number: 1/4
Number -> Type
0.25 -> <class 'float'>
Enter your number: sqrt(3)
Number -> Type
1.7320508075688772 -> <class 'float'>
Enter your number: 3+5j
Number -> Type
(3+5j) -> <class 'complex'>
Enter your number:

List of converted values:
[1.0, 0.25, 1.7320508075688772, (3+5j)]

我希望这会有所帮助!

PS:我没有使用任何正格来评估空间(例如,加上空间的空间会导致例外),也没有试图涵盖常见的加薪异常。

I understood that your issue is working on the inputs. So you could input them as strings and convert them to the specific type, like this:

import math


def get_sqrt(input_number: str) -> float:
    """Return square root of input_number if in the form "sqrt(number)" (e.g. sqrt(2))"""
    value = float(input_number[input_number.find("(") + 1 : input_number.find(")")])
    return math.sqrt(value)


def get_pi(input_number: str) -> float:
    """Return pi value if input_number in the form "pi" """
    return math.pi


def get_division(input_number: str) -> float:
    """Return division value if input_number in the form "a/b" (e.g. 2/5)"""
    value = float(input_number.split("/")[0]) / float(input_number.split("/")[1])

    return value


def get_complex(input_number: str) -> complex:
    """Return complex value of input_number in the form "a+bj" (e.g. 1+2j)"""
    return complex(input_number)


def get_correct_number(input_number: str):
    str_patterns = {"sqrt": get_sqrt, "pi": get_pi, "/": get_division, "j": get_complex}

    for str_pattern, func in str_patterns.items():
        if str_pattern in input_number:
            return func(input_number)

    return float(input_number)


if __name__ == "__main__":
    # If you want to fill your list of values
    my_own_list = ["sqrt(2)", "pi", "1/2", "0", "4", "-4"]
    my_values = []

    print("Number -> Type")
    for input_number in my_own_list:
        number = get_correct_number(input_number)
        print(number, "->", type(number))
        my_values.append(number)

    print("\nList of converted values: ")
    print(my_values)

    # If you want to input values manually
    dont_stop = True
    my_values = []

    print("\nManual input\n")
    while dont_stop:
        input_number = input("Enter your number: ")
        if input_number:
            number = get_correct_number(input_number)
            print("Number -> Type")
            print(number, "->", type(number))
            my_values.append(number)
        else:
            dont_stop = False

    print("\nList of converted values: ")
    print(my_values)

And here one example of input/output on the terminal:

Number -> Type
1.4142135623730951 -> <class 'float'>
3.141592653589793 -> <class 'float'>
0.5 -> <class 'float'>
0.0 -> <class 'float'>
4.0 -> <class 'float'>
-4.0 -> <class 'float'>

List of converted values:
[1.4142135623730951, 3.141592653589793, 0.5, 0.0, 4.0, -4.0]

Manual input

Enter your number: 1
Number -> Type
1.0 -> <class 'float'>
Enter your number: 1/4
Number -> Type
0.25 -> <class 'float'>
Enter your number: sqrt(3)
Number -> Type
1.7320508075688772 -> <class 'float'>
Enter your number: 3+5j
Number -> Type
(3+5j) -> <class 'complex'>
Enter your number:

List of converted values:
[1.0, 0.25, 1.7320508075688772, (3+5j)]

I hope that helps!

p.s.: I didn't use any regex to evaluate spaces (e.g. '2+ 5j' with space after plus would lead to an exception), neither tried to cover common raise exceptions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文