使用Manim的FunctionGraph生成f(X)=-1/(x**2)无图形问题求助
问题原因与解决方案
核心问题
FunctionGraph默认的x取值范围是[-10, 10],但f(x) = -1/(x²)在x趋近于0时,函数值会直奔负无穷。- Manim默认的相机视口(y轴范围)装不下这么低的数值,导致整个图形都在可视区域外,所以生成的PNG是空白的。
- 而
f(x)=1/x虽然也有奇点,但它的函数值在正负两边都有分布,默认视口能抓到一部分,所以能正常显示。
解决办法
1. 避开x=0附近的奇点
直接限制x的取值范围,躲开x=0的区域,让函数值落在相机能看到的范围内:
from manim import * class SimpleFunction(Scene): def construct(self): # x范围设为[-10, -0.1]和[0.1, 10],通过discontinuities标记断点 graph = FunctionGraph(lambda x: -1/(x**2), x_range=[-10, 10, 0.01], discontinuities=[0]) self.add(graph)
2. 手动调整相机的y轴范围
如果想保留x的全范围,就把相机的y轴范围往下调,覆盖函数的负向取值:
from manim import * class SimpleFunction(Scene): def construct(self): graph = FunctionGraph(lambda x: -1/(x**2)) self.add(graph) # 把y轴范围设为[-100, 0],这样就能看到趋近负无穷的部分图形 self.camera.frame.set_y_range(-100, 0)
3. 两种方式结合(更美观)
既避开奇点附近的极端值,又调整y范围,让图形显示更舒服:
from manim import * class SimpleFunction(Scene): def construct(self): graph = FunctionGraph(lambda x: -1/(x**2), x_range=[-5, 5, 0.01], discontinuities=[0]) self.add(graph) self.camera.frame.set_y_range(-10, 0)
内容的提问来源于stack exchange,提问作者Senthil
相关产品推荐
相关产品推荐

