为什么我的路径是在马尼姆绘制布朗运动时不连续的?

问题描述 投票:0回答:1

我试图在曼尼姆(Manim)中动画布朗尼运动的道路,但是我的情节看起来不连续。

在这里是图像(白色路径是布朗运动,绿色路径是二次变异):

Brownian Path with unexpected discontinuties 我正在使用Python 3.9.13和Manim CE 0.19.0。 这是代码

from manim import * import numpy as np class BrownianPath(): def __init__(self, drift = 0.0, sigma = 1.0): self.drift = drift self.sigma = sigma self.T = [0] self.path = [0] self.qv = [0] self.rng = np.random.default_rng() def increment(self, dT): self.path.append(self.path[-1] + self.drift*dT + self.rng.normal()*self.sigma*np.sqrt(dT)) self.qv.append(self.qv[-1] + (self.path[-1] - self.path[-2])**2) self.T.append(self.T[-1] + dT) def run_for_time(self, T = 1.0, n = 100): for t in np.arange(0, T, T/n): self.increment(T/n) self.T.append(self.T[-1] + T/n) def get_last_path(self): return self.path[-1] def get_last_qv(self): return self.qv[-1] def get_last_T(self): return self.T[-1] class Brownian(Scene): def construct(self): axes = Axes([0, 5], [-1, 6]) self.add(axes) # Create the brownian path bm = BrownianPath(drift=0.1) # Animate its path and its quadratic variation self.path = VGroup() self.path.add(Line(axes.c2p(0, 0, 0), axes.c2p(0, 0, 0))) self.qv = VGroup() self.qv.add(Line(axes.c2p(0, 0, 0), axes.c2p(0, 0, 0))) def brownian_updater(mob, dt): bm.increment(dt) mob.move_to(axes.c2p(bm.get_last_T(), bm.get_last_path(), 0)) def qv_updater(mob, dt): # assumes brownian updater called first (?) mob.move_to(axes.c2p(bm.get_last_T(), bm.get_last_qv(), 0)) def add_path_element(): last_line = self.path[-1] self.path.add(Line(last_line, axes.c2p(bm.get_last_T(), bm.get_last_path(), 0))) return self.path def add_qv_element(): last_line = self.qv[-1] self.qv.add(Line(last_line, axes.c2p(bm.get_last_T(), bm.get_last_qv(), 0), color=GREEN)) return self.qv dot = Dot(radius=0.07, color=BLUE) dot.move_to(axes.c2p(0, 0, 0)) dot_qv = Dot(radius=0.08, color=GREEN) dot_qv.move_to(axes.c2p(0, 0, 0)) dot.add_updater(brownian_updater) dot_qv.add_updater(qv_updater) curve_to_path = always_redraw(add_path_element) curve_to_qv = always_redraw(add_qv_element) self.add(dot, dot_qv) self.add(curve_to_path, curve_to_qv) self.wait(5)

也许这与场景如何调用更新器有关,并且顺序不一致?
    

您现在已经找到了不和谐的方式,我建议继续在那儿进行讨论,因为在答案和在线渲染代码中包括图像和视频的可能性更好。
manim stochastic-process
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.