-1

此视频中,Grant 执行非线性变换。从笛卡尔到极坐标的变换也是非线性的。我们发现雅可比矩阵的行列式是 1/r。我可以复制格兰特所做的变换,但是如何使用 manim 将这个笛卡尔动画设置为极坐标。换句话说,什么是 f1 和 f2。我试过(x^2 + y^2)^0.5 和 arctan(y/x)

def construct(self):
    def arctan(x, y):
        if x and y == 0:
            return 0
        else:
            return np.arctan(y / x)

    grid = NumberPlane()
    grid.prepare_for_nonlinear_transform()
    self.play(
        grid.apply_function,
        lambda p: p + np.array([
            (p[0]**2 + p[1]**2)**0.5,
            arctan(p[0], p[1]),
            0,
        ]),
        run_time=3,
    )
4

1 回答 1

1
class AV(Scene):
    def construct(self):
        def polar2c(p):
            return np.array([
                p[0]*np.cos(p[1]),
                p[0]*np.sin(p[1]),
                0
                ])

        grid = NumberPlane(
            x_line_frequency=PI/4,
            y_line_frequency=PI/4,
            x_min=-PI,
            x_max=PI,
            y_min=-PI,
            y_max=PI
            )
        func = FunctionGraph(lambda x: 0.5*np.sin(5*x)+2,x_min=-PI,x_max=PI)
        grid.add(func)
        self.add(grid)
        grid.faded_lines[4:9].fade(1)
        grid.faded_lines[12:].fade(1)
        grid.background_lines[4:9].fade(1)
        grid.background_lines[12:].fade(1)
        self.play(Rotating(func,radians=PI,axis=UR,about_point=ORIGIN,run_time=2,rate_func=smooth))
        grid.generate_target()
        grid.target.prepare_for_nonlinear_transform()
        grid.target.apply_function(lambda p: polar2c(p))

        self.play(
            MoveToTarget(grid,run_time=4)
        )
        self.wait(3)
于 2020-01-31T07:05:43.657 回答