相对于当前位置画线

在Easy Graphics中,每个绘图对象(包括绘图窗口)都保存着一个”当前绘图位置”。可以使用该位置来进行相对绘画。

相关的函数有:

get_x
get_y
get_drawing_pos(image) 获取当前绘图位置(x,y)的坐标值
move_to(x, y, image) 设置当前绘图位置到(x,y)。
move_rel(dx, dy, image) 将绘图位置在x轴方向移动dx,在y轴方向移动dy。
line_to(x, y, image) 从当前绘图位置到(x,y)画线,然后将当前绘图位置更新为(x,y)
line_rel(dx, dy, image) 从当前绘图位置(x,y)到(x+dx,y+dy)画线,然后将当前绘图位置更新为(x+dx,y+dy)。

下面的程序使用当前绘图位置画了一条虚线。

from easygraphics import *

init_graph(400,100)

move_to(50,50)
for i in range(10):
    line_rel(10,0)
    move_rel(20,0)
pause()
close_graph()

近似绘制函数曲线

有时我们需要画多条依次首尾相连的线段。

例如,要绘制函数f(x)=sin(x)在区间[-3,3]上的函数曲线,我们可以通过多条连续线段来进行近似绘制。

  1. 在数轴上将[-3,3]n等分,获得n+1个在[-3,3]上等距分布的值:x0,x1,x2,x3,……,xn。其中x0=-3,xn=3。
  2. 计算函数值f(x0),f(x1),f(x2),f(x3), …, f(xn)。
  3. 绘制n条线段:(x0,f(x0))到(x1,f(x1))、(x1,f(x1))到(x2,f(x2))、……、(xn-1,f(xn-1))到(xn,f(xn))。
  4. 最终的结果就是我们需要的近似曲线。

显然,n越大,近似就约精确。当n很大时,为了减少不必要的内存开销,我们最好是逐一计算各线段的端点,边计算边绘制。

下面的程序使用上述方法绘制[-3,3]区间上的sin(x)曲线。

from easygraphics import *
import math as m

init_graph(600,400)
translate(300,200) # move origin to the center
scale(100,-100) # zoom each axis 100 times, and make y-axis grow from bottom to top.

x=-3
delta=0.01
move_to(x,m.sin(x))
while x<=3:
    line_to(x,m.sin(x))
    x=x+delta
pause()
close_graph()