标绘

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)

微积分老师经常在黑板上画出以下情节:不是一个弧线,而是几个弧线:即 \(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还可以用来创建三维情节。在笔记本和REPL中,默认情况下将使用开放源码包显示这些曲线图 [ThreeJS], 它支持用鼠标交互地旋转和缩放图形。

使用 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 由一个或两个变量的函数确定(参数通常 uv )。前面的曲线图可以用参数表示如下:

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中绘制3D曲面的第三种方法是 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

下面是一些更多的例子:

Yellow Whitney's umbrella

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

Cross cap

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

Lemniscate:

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