三种画笔模式

  • 绘画模式

  • 擦除模式

  • 反色模式(画笔颜色像素取反,同时画笔位置设置为落笔)

 

绘画模式

 

ppt 指令: ->     pen point     ->     “笔尖”

将画笔设为绘画模式

格式: ppt

示例: ppt

            circle 100

            ;显示一个半径为100像素的圆形

 

擦除模式


pe 指令: ->     pen earse     ->     “笔 擦除”

将画笔设为擦除模式

格式: pe

示例: pe

            circle 100

            ;擦除刚才画的那个半径为100像素的圆形

 

反色模式

 

penreverse 指令: ->     pen reverse     ->     “笔 颠倒”

画笔颜色像素取反,同时位置设为down

格式: penreverse

示例: ppt

            setpc 4

            penreverse

            circle 100

            ;红色画笔在反色模式下,画的图形是浅蓝色的

 

获取画笔模式

 

penmode 指令: ->     pen mode     ->     “笔 模式”

读取画笔当前的模式

格式: penmode

示例: show penmode

            ;输出 reverse

 

说明

  • paint  表示绘画模式

  • erase  表示擦除模式

  • reverse 表示反色模式

  

 

两种笔尖位置

  • 抬笔

  • 落笔

 

抬笔

 

pu 指令: ->     pen up    ->     “笔 向上”

抬笔,抬笔时移动位置不会画线

格式: pu

示例: st

            pu

            fd 100

            ;移动了位置,但没有画线

 

落笔

 

pd 指令: ->     pen down     ->     “笔 向下”

落笔,落笔时可以画线

格式: pd

示例: pd

            fd 100

            ;画了一条100像素长的直线

 

获取笔尖位置

 

pendownp 指令: -> pen down pinpoint-> “笔 向下 确定”

是抬笔还是落笔,

落笔状态时输出 true,

抬笔状态时,输出 false。

格式: pendownp

示例: show pendownp

            ;输出 true

 

一个快捷指令

 

pennormal 指令: ->     pen normal     ->     “笔 正常”

将笔尖位置设置为落笔状态,同时将画笔设置为绘画状态;

相当于 pd 和 ppt 两个指令。

格式: pennormal

示例: pu

            pe

            pennormal

            fd 100

            ;画了一条100像素长的直线

 

 

 

设置画笔宽度

 

setpensize 指令: ->     set pen size     ->     “设置 笔 大小”

设置画笔宽度

格式: setpensize [ 宽度 高度 ]

示例: setpensize [ 10 10 ]

            fd 100

            ;用宽度为10像素的画笔画一条100像素长的线段

 

获取画笔宽度

 

pensize 指令: ->     pen size     ->     “笔 大小”

返回画笔的宽度和高度

格式: pensize

示例: show pensize

            ;输出 [10 10 ]

 


 

需求描述

 

猪头,卡通形象

椭圆的脸庞

小小的眼睛

耷拉着耳朵

翘翘的鼻子

圆圆的鼻孔

 

设计思路

 

分解脸庞眼睛鼻子耳朵

连接:先画脸庞,再画眼睛,再画鼻子,最后画耳朵

递归

    脸庞:椭圆形,粉色边线,黄色填充

    眼睛:两个,左右对称,小圆形,黑色填充

    鼻子——分解轮廓鼻孔

       ——连接:先画轮廓,再画鼻孔

       ——递归

            轮廓:椭圆形,粉色边线,棕色填充

            鼻孔:两个,左右对称,小圆形,白色边线,白色填充

            耳朵:两个,左右对称,三角形,粉色边线,粉色填充

 

程序设计

 

定义五段程序:

 

程序 zhutou:

        主程序,实现流程控制逻辑。

 

程序 zhu_yanjing:

        画猪眼睛

        参数 zuo_you,表示左眼还是右眼

        参数 yan_juli,表示眼睛到中轴的距离

        参数 yan_banjing,表示眼睛圆形半径

 

程序 zhu_bizi:

        画猪鼻子

        参数 bizi_heng_banjing,表示鼻子椭圆横半径

        参数 bizi_zong_banjing,表示鼻子椭圆纵半径

        参数 bi_juli,表示表示鼻孔到中轴的距离

        参数 bi_banjing,表示鼻孔半径

 

程序 zhu_bikong:

        画猪鼻孔

        参数 zuo_you,表示左边还是右边

        参数 bi_juli,表示鼻孔到中轴的距离

        参数 bi_banjing,表示鼻孔圆形半径

 

程序 zhu_erduo:

        画猪耳朵

        参数 zuo_you,表示左边还是右边

        参数 er_zhou,表示耳朵轴到猪头中心点的距离

        参数 er_juli,表示耳朵到中轴的距离

        参数 er_bianchang,表示耳朵三角形边长

 

程序代码

 

to zhutou          ;猪头

    make "heng_banjing 150   ;猪头椭圆横半径

    make "zong_banjing 120    ;猪头椭圆纵半径

    make "yan_banjing :heng_banjing / 15 ;眼睛圆形半径

    ;眼睛到中轴的距离

    make "yan_juli :heng_banjing * 2 / 5

    make "bi_banjing :heng_banjing / 10 ;鼻孔圆形半径

    make "bi_juli :heng_banjing / 4 ;鼻孔到中轴的距离

    make "er_bianchang :zong_banjing ;耳朵三角形边长

    ;耳朵到中轴的距离

    make "er_juli :heng_banjing * 7 / 24  

    ht         ;隐藏箭头

    setpensize [10 10]   ;设置画笔宽度为10

    setpc 5       ;设置画笔为品红色

    pd         ;落笔

    ellipse :heng_banjing :zong_banjing ;画猪头椭圆

    setfc 6       ;设置填充色为黄色

    fill         ;填充

    pu       ;抬笔

    fd :yan_banjing  ;前进到两个眼睛的中间位置

    ;调用画眼睛的程序,左眼

    zhu_yanjing 1 :yan_juli :yan_banjing

    ;调用画眼睛的程序,右眼

    zhu_yanjing 0 :yan_juli :yan_banjing

    pu       ;抬笔

    setxy 0 0    ;回到屏幕中心点

    seth 180    ;设置方向向下

    ;前进猪头椭圆纵半径的一半做为鼻子椭圆的中心点

    fd :zong_banjing / 2

    ;调用画鼻子程序

    zhu_bizi (:heng_banjing / 2) (:zong_banjing * 7 / 24)  :bi_juli :bi_banjing

    ;调用画耳朵程序,画左耳朵

    zhu_erduo 1 (:zong_banjing * 9 / 10) :er_juli :er_bianchang

    ;调用画耳朵程序,画右耳朵

    zhu_erduo 0 (:zong_banjing * 9 / 10) :er_juli :er_bianchang

    pu       ;抬笔

    setxy 0 0    ;恢复位置

    seth 0     ;恢复方向

    setpensize [ 1 1 ] ;恢复画笔宽度

end

 

to zhu_yanjing :zuo_you :yan_juli :yan_banjing

    ;画猪眼睛

    ;参数zuo_you:左眼还是右眼,1代表左,0代表右

    ;参数yan_juli:眼睛到中轴的距离

    ;参数yan_banjing:眼睛圆形半径

    ifelse :zuo_you = 1 [

        lt 90      ;左转向90度

    ] [

        rt 90      ;右转向90度

    ]

    fd :yan_juli     ;前进到眼睛的位置

    pd        ;落笔

    setpc 0      ;设置画笔为黑色

    circle :yan_banjing  ;画眼睛圆形

    setfc 0      ;设置黑色填充色

    fill        ;填充

    pu        ;抬笔

    bk :yan_juli    ;退回中间位置

    seth 0      ;恢复方向  

end

 

to zhu_bizi :bizi_heng_banjing :bizi_zong_banjing :bi_juli :bi_banjing

    ;画猪鼻子

    ;参数bizi_heng_banjing代表鼻子椭圆横半径

    ;参数bizi_zong_banjing代表鼻子椭圆纵半径

    ;参数bi_juli代表鼻孔到中轴的距离

    ;参数bi_banjing代表鼻孔半径

    setpc 5     ;设置画笔为品红色

    setpensize [6 6]  ;设置画笔宽度为6个像素

    pd       ;落笔

    ;以猪头横半径的一半做为鼻子椭圆的横半径,以猪头纵半径的7/24做为鼻子椭圆的纵半径

    ellipse :bizi_heng_banjing :bizi_zong_banjing

    setfc 12     ;设置填充色为粉色

    fill       ;填充

    ;调用画鼻孔程序,画左鼻孔

    zhu_bikong 1 :bi_juli :bi_banjing

    ;调用画鼻孔程序,画右鼻孔

    zhu_bikong 0 :bi_juli :bi_banjing

end

 

to zhu_bikong :zuo_you :bi_juli :bi_banjing ;画猪鼻孔

    ;参数zuo_you:左边还是右边,1代表左,0代表右

    ;参数bi_juli:鼻孔到中轴的距离

    ;参数bi_banjing:鼻孔圆形半径

    seth 0     ;设置方向为向上

    ifelse :zuo_you = 1 [

        lt 90     ;左转向90度

    ] [

        rt 90     ;右转向90度

    ]

    setpc 7     ;设置画笔为白色

    setfc 7     ;设置填充色为白色

    setpensize [1 1]  ;设置画笔宽度为1像素

    pu       ;抬笔

    fd :bi_juli    ;前进鼻孔圆形半径

    pd       ;落笔

    circle :bi_banjing ;画鼻孔圆形

    fill       ;填充

    pu       ;抬笔

    bk :bi_juli    ;退回中间位置

    seth 0     ;恢复方向

end

 

to zhu_erduo :zuo_you :er_zhou :er_juli :er_bianchang ;画猪耳朵

    ;参数zuo_you:左边还是右边,1代表左,0代表右

    ;参数er_zhou:耳朵轴到猪头中心点的距离

    ;参数er_juli:耳朵到中轴的距离

    ;参数er_bianchang:耳朵三角形边长

    pu        ;抬笔

    setxy 0 0     ;回到猪头中心点

    seth 0      ;设置方向为向上

    setpensize [10 10]  ;设置画笔宽度为10像素

    setpc 5      ;设置画笔为品红色

    setfc 5      ;设置填充色为品红色

    pu        ;抬笔

    fd :er_zhou    ;移动到两耳中心位置

    ifelse :zuo_you = 1 [

        lt 90      ;左转90度

    ] [

        rt 90      ;右转90度

    ]

    fd :er_juli     ;前进耳朵到中轴距离

    ifelse :zuo_you = 1 [

        rt 90      ;右转90度

    ] [

        lt 90      ;左转90度

    ]

    fd :er_bianchang/2 ;移动耳朵三角形边长一半的距离

    ifelse :zuo_you = 1 [

        lt 180     ;左转180度

    ] [

        rt 180     ;右转180度

    ]

    pd        ;落笔

    for [i 1 3 1] [

        fd :er_bianchang ;前进耳朵三角形边长的距离

        ifelse :zuo_you = 1 [

            rt 120    ;右转120度

        ] [

            lt 120    ;左转120度

        ]

    ]

    felse :zuo_you = 1 [

        rt 10      ;右转10度

    ] [

        lt 10      ;左转10度

    ]

    pu    ;抬笔

    fd 40   ;前进40像素,进入耳朵在猪头外的区域

    fill    ;填充

    fd 40   ;前进40像素,进入耳朵在猪头内的区域

    fill    ;填充

end

 

运行程序

 

zhutou

 

运行效果


 

 



第18章:画板模式

ξ 18.1 模式类型

ξ 18.2 包装模式

ξ 18.3 窗口模式

ξ 18.4 围栏模式

ξ 18.5 透视模式