高级绘图指令

填充图形

begin_fill()和end_fill()之间绘制的图形会被填充。填充时未闭合的形状会自动闭合。

缺省状态下填充色是浅灰色。你可以使用easygraphics的set_fill_color()函数来改变填充色。

下面的程序绘制和填充了一个五角星。注意我们使用FillRule.WINDING_FILL规则,这样整个五角星都会被填充。

from easygraphics.turtle import *
from easygraphics import *


def main():
    create_world(150, 150)

    setxy(20,-50)
    set_fill_rule(FillRule.WINDING_FILL)
    begin_fill()
    for i in range(5):
        fd(100)
        lt(144)
    end_fill()

    pause()
    close_world()

easy_run(main)
../_images/04_fill.png

沿圆弧移动

move_arc(radius,angle)让海龟沿圆弧路径移动。

移动时,圆心在海龟左侧的radius单位处。也就是说,如果radius大于0,则圆心在海龟左侧;如果radius小于0,圆心在海龟右侧。

Angle是圆弧对应的圆心角的角度。如果angle大于0,那么海龟绕圆心前进;如果angle小于0,那么海龟绕圆心后退。因此:

  • 如果angle>0并且radius>0,那么海龟沿逆时针方向前进;
  • 如果angle>0并且radius<0,那么海龟沿顺时针方向前进;
  • 如果angle<0并且radius>0,那么回归沿顺时针方向后退;
  • 如果angle<0并且radius<0,海龟沿逆时针方向后退。
from easygraphics.turtle import *

def main():
    create_world(400, 300)
    set_speed(10)

    lt(45)

    fd(100)
    lt(90)
    move_arc(100, 90)
    lt(90)
    fd(100)
    lt(90)

    fd(100)
    rt(90)
    move_arc(-100, 90)
    rt(90)
    fd(100)
    rt(90)

    bk(100)
    rt(90)
    move_arc(100, -90)
    rt(90)
    bk(100)
    rt(90)

    bk(100)
    lt(90)
    move_arc(-100, -90)
    lt(90)
    bk(100)
    lt(90)

    pause()

    close_world()

easy_run(main)
../_images/04_move_arc.png

沿椭圆弧移动

move_ellipse(radius_left, radius_top, angle)让海龟沿椭圆弧路径移动。

radius_left是椭圆在垂直于海龟朝向的方向上的半径,可以为正也可以为负;radius_top是椭圆在平行于海龟朝向的方向上的半径,必须为正。

圆心位于海龟左侧radius_left距离。也就是说,如果radius_left>0,圆心在海龟左侧;如果radius_left<0,圆心在海龟右侧。

如果angle大于0,那么海龟绕圆心前进;如果angle小于0,那么海龟绕圆心后退。因此:

  • 如果angle>0并且radius_left>0,那么海龟沿逆时针方向前进;
  • 如果angle>0并且radius_left<0,那么海龟沿逆时针方向前进;
  • 如果angle<0并且radius_left>0,那么海龟沿顺时针方向后退;
  • 如果angle<0并且radius_left<0,那么海龟沿逆时针方向后退;
from easygraphics.turtle import *
from easygraphics import *

def main():
    create_world(400, 300)
    set_speed(5)

    lt(45)

    set_fill_color(Color.LIGHT_RED)
    begin_fill()
    fd(100)
    lt(90)
    move_ellipse(100, 50, 90)
    lt(90)
    fd(50)
    lt(90)
    end_fill()

    begin_fill()
    fd(100)
    rt(90)
    move_ellipse(-100, 50, 90)
    rt(90)
    fd(50)
    rt(90)
    end_fill()

    begin_fill()
    bk(100)
    rt(90)
    move_ellipse(100, 50, -90)
    rt(90)
    bk(50)
    rt(90)
    end_fill()

    begin_fill()
    bk(100)
    lt(90)
    move_ellipse(-100, 50, -90)
    lt(90)
    bk(50)
    lt(90)
    end_fill()

    pause()

    close_world()

easy_run(main)
../_images/04_move_ellipse.png

使用easygraphics函数

大多数easygraphics函数都可以在海龟作图中使用

下面的程序使用easygraphics函数来设置线宽、颜色,画一个圆,以及填充了一个矩形。

from easygraphics.turtle import *
from easygraphics import *

def main():
    create_world(300,300)

    set_line_width(3)
    set_color("red")
    set_background_color("lightgray")
    set_fill_color(Color.LIGHT_BLUE)

    begin_fill()
    for i in range(4):
        fd(100)
        lt(90)
    end_fill()

    circle(50,50,30)
    fill_rect(-100,-100,-50,-50)
    pause()
    close_world()

easy_run(main)
../_images/04_easy_funcs.png