三种画笔模式
绘画模式
擦除模式
反色模式(画笔颜色像素取反,同时画笔位置设置为落笔)
绘画模式
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 透视模式