作图¶
Sage可以制作二维和三维的情节。
二维图¶
在二维中,Sage可以绘制圆、线和多边形;在直角坐标系中绘制函数图;还可以绘制极坐标图、等高线图和向量场图。我们在这里举一些例子。有关使用Sage打印的更多示例,请参见 解微分方程 和 马克西玛 ,以及 Sage Constructions 文档。
此命令将生成半径为1的黄色圆,以原点为中心:
sage: circle((0,0), 1, rgbcolor=(1,1,0))
Graphics object consisting of 1 graphics primitive
也可以生成填充圆:
sage: circle((0,0), 1, rgbcolor=(1,1,0), fill=True)
Graphics object consisting of 1 graphics primitive
也可以通过将圆指定给变量来创建圆;这不会绘制圆:
sage: c = circle((0,0), 1, rgbcolor=(1,1,0))
要绘制它,请使用 c.show()
或 show(c)
如下:
sage: c.show()
或者,评估 c.save('filename.png')
将绘图保存到给定文件中。
现在,这些“圆”看起来更像椭圆,因为轴的比例不同。您可以修复此问题:
sage: c.show(aspect_ratio=1)
命令 show(c, aspect_ratio=1)
完成相同的操作,或者您可以使用 c.save('filename.png', aspect_ratio=1)
.
绘制基本函数很容易:
sage: plot(cos, (-5,5))
Graphics object consisting of 1 graphics primitive
指定变量名称后,还可以创建参数化打印:
sage: x = var('x')
sage: parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),rgbcolor=hue(0.6))
Graphics object consisting of 1 graphics primitive
需要注意的是,只有当原点在图形的可视范围内时,图的轴线才会相交,并且如果数值足够大,则可以使用科学的符号:
sage: plot(x^2,(x,300,500))
Graphics object consisting of 1 graphics primitive
您可以通过添加多个绘图来合并它们:
sage: x = var('x')
sage: p1 = parametric_plot((cos(x),sin(x)),(x,0,2*pi),rgbcolor=hue(0.2))
sage: p2 = parametric_plot((cos(x),sin(x)^2),(x,0,2*pi),rgbcolor=hue(0.4))
sage: p3 = parametric_plot((cos(x),sin(x)^3),(x,0,2*pi),rgbcolor=hue(0.6))
sage: show(p1+p2+p3, axes=false)
生成填充形状的一个好方法是生成一个点列表 (L
在下面的示例中),然后使用 polygon
命令打印由这些点形成的边界的形状。例如,这是一个绿色的三角形:
sage: L = [[-1+cos(pi*i/100)*(1+cos(pi*i/100)),
....: 2*sin(pi*i/100)*(1-cos(pi*i/100))] for i in range(200)]
sage: p = polygon(L, rgbcolor=(1/8,3/4,1/2))
sage: p
Graphics object consisting of 1 graphics primitive
类型 show(p, axes=false)
看这个没有任何轴。
可以向绘图添加文本:
sage: L = [[6*cos(pi*i/100)+5*cos((6/2)*pi*i/100),
....: 6*sin(pi*i/100)-5*sin((6/2)*pi*i/100)] for i in range(200)]
sage: p = polygon(L, rgbcolor=(1/8,1/4,1/2))
sage: t = text("hypotrochoid", (5,4), rgbcolor=(1,0,0))
sage: show(p+t)
微积分教师经常在黑板上画出以下图形:不仅仅是arcsin的一个分支,而是其中的几个分支:即 \(y=\sin(x)\) 对于 \(x\) 之间 \(-2\pi\) 和 \(2\pi\) ,翻转了45度线。下面的Sage命令构造了这个:
sage: v = [(sin(x),x) for x in srange(-2*float(pi),2*float(pi),0.1)]
sage: line(v)
Graphics object consisting of 1 graphics primitive
由于正切函数的范围比正弦大,如果使用相同的技巧绘制反切线,则应更改 x -坐标轴:
sage: v = [(tan(x),x) for x in srange(-2*float(pi),2*float(pi),0.01)]
sage: show(line(v), xmin=-20, xmax=20)
Sage还计算极坐标图、等高线图和向量场图(对于特殊类型的函数)。以下是等高线图的示例:
sage: f = lambda x,y: cos(x*y)
sage: contour_plot(f, (-4, 4), (-4, 4))
Graphics object consisting of 1 graphics primitive
三维图形¶
Sage也可以用来创造三维的情节。在notebook和REPL中,默认情况下将使用开源软件包显示这些绘图 [Jmol], 它支持用鼠标交互旋转和缩放图形。
使用 plot3d
用图形表示形式的函数 f(x, y) = z :
sage: x, y = var('x,y')
sage: plot3d(x^2 + y^2, (x,-2,2), (y,-2,2))
Graphics3d Object
或者,您可以使用 parametric_plot3d
绘制参数曲面的步骤 x, y, z 由一个或两个变量的函数决定(通常是参数 u 和 v ). 上一个图可以用参数表示如下:
sage: u, v = var('u, v')
sage: f_x(u, v) = u
sage: f_y(u, v) = v
sage: f_z(u, v) = u^2 + v^2
sage: parametric_plot3d([f_x, f_y, f_z], (u, -2, 2), (v, -2, 2))
Graphics3d Object
在Sage中绘制三维曲面的第三种方法是 implicit_plot3d
,绘制函数的轮廓 f(x, y, z) = 0 (这定义了一组点)。我们使用经典公式绘制球体:
sage: x, y, z = var('x, y, z')
sage: implicit_plot3d(x^2 + y^2 + z^2 - 4, (x,-2, 2), (y,-2, 2), (z,-2, 2))
Graphics3d Object
以下是更多示例:
sage: u, v = var('u,v')
sage: fx = u*v
sage: fy = u
sage: fz = v^2
sage: parametric_plot3d([fx, fy, fz], (u, -1, 1), (v, -1, 1),
....: frame=False, color="yellow")
Graphics3d Object
sage: u, v = var('u,v')
sage: fx = (1+cos(v))*cos(u)
sage: fy = (1+cos(v))*sin(u)
sage: fz = -tanh((2/3)*(u-pi))*sin(v)
sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi),
....: frame=False, color="red")
Graphics3d Object
扭曲圆环:
sage: u, v = var('u,v')
sage: fx = (3+sin(v)+cos(u))*cos(2*v)
sage: fy = (3+sin(v)+cos(u))*sin(2*v)
sage: fz = sin(u)+2*cos(v)
sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi),
....: frame=False, color="red")
Graphics3d Object
柠檬酸盐:
sage: x, y, z = var('x,y,z')
sage: f(x, y, z) = 4*x^2 * (x^2 + y^2 + z^2 + z) + y^2 * (y^2 + z^2 - 1)
sage: implicit_plot3d(f, (x, -0.5, 0.5), (y, -1, 1), (z, -1, 1))
Graphics3d Object