语法学习
====================
例子1:
to polygon :len :sides
repeat :sides [ fd :len rt 360.0 / :sides ]
end
to myPic :len :rep
lt 90 pu fd 400 rt 90 pd ; fd 400 定位用,要根据自己的系统设定具体值
repeat :rep [ if 2 < repcount [ polygon :len repcount ] ]
end
myPic 100 20
效果图见 J:/skyDiary/Data/myPic.bmp
====================
例子2:
to myPrint :len
make "count 0
do.until [ print :count make "count :count + 1 ] [ :count > :len ]
end
myPrint 5
输出结果为:
0
1
2
3
4
5
====================
例子3:
用logo写的haino程序
make "steps 1
to haino :size :from :mid :to
if :size = 0 [ stop ]
haino :size - 1 :from :to :mid
print ( se :steps :from "-> :to )
make "steps :steps + 1
haino :size - 1 :mid :from :to
end
haino 3 "a "b "c
输出结果为:
1 a -> c
2 a -> b
3 c -> b
4 a -> c
5 b -> a
6 b -> c
7 a -> c
====================
例子4:
用logo做的九九乘法表
make "myLeft -550
make "myBottom 0
make "myWidth 100
make "myHeight 30
to myLocate :x :y
pu
setxy :myLeft + :x * :myWidth :myBottom + :y * :myHeight
pd
setheading 90
repeat 2 [ fd :myWidth rt 90 fd :myHeight rt 90 ]
pu
setxy :myLeft + :x * :myWidth + 5 :myBottom + :y * :myHeight - 5
pd
setheading 90
end
to table99
for [ i 1 9 1 ] [ for [ j 1 9 1 ] [ myLocate :i 10 - :j label ( se :i "* :j "= :i * :j ) ] ]
end
table99
pu setxy :myLeft + :myWidth * 4.5 :myBottom + :myHeight * 10 pd
label "九九乘法表
ht
结果见 j:/skyDiary/data/table[9by9].bmp
====================
例子5:
用logo画超立方体
to hyperCube :len
pu setxy 0 - :len - :len / 5 :len / 2 pd
setpencolor [ 0 0 255 ]
setpensize [ 2 2 ]
setheading 90
repeat 8 [ box :len rt 90 fd :len lt 135 ]
end
to box :len
repeat 4 [ fd :len rt 90 ]
end
hyperCube 100
ht
setactivearea [ -200 -200 200 200 ]
( gifsave "hyperCube.gif )
效果图见 j:/skyDiary/data/hyperCube.gif
====================
例子6:
用logo建立基本几何形的函数库
;画正三角形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正三角形的边长
to triangel :centerX :centerY :len
local "oldPos
local "oldHeading
make "oldPos pos
make "oldHeading heading
pu setxy :centerX :centerY fd :len / sqrt 3 pd
rt 150
repeat 3 [ fd :len rt 120 ]
pu setpos :oldPos pd
setheading :oldHeading
end
;画正方形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方形的边长
to rect :centerX :centerY :len
polygon :centerX :centerY :len 4
end
;画正五边形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方五边形的边长
to pentagon :centerX :centerY :len
local "oldPos
local "oldHeading
make "oldPos pos
make "oldHeading heading
pu setxy :centerX :centerY fd :len / 2 / cos 54 pd
rt 126
repeat 5 [ fd :len rt 72 ]
pu setpos :oldPos pd
setheading :oldHeading
end
;画正六边形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方六边形的边长
to hexagon :centerX :centerY :len
polygon :centerX :centerY :len 6
end
;画正多边形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方多边形的边长
;参数4 几何形的边数,如果3表示要画正三角形,4表示要画正方形,5表示要画正五边形...
to polygon :centerX :centerY :len :sides
local "oldPos
local "oldHeading
make "oldPos pos
make "oldHeading heading
pu
setxy :centerX :centerY
if ( modulo :sides 2 ) = 1 [ make "p ( 180 - 360.0 / :sides ) / 2 fd :len / 2 / cos :p rt 180 - :p ]
if ( modulo :sides 2 ) = 0 [ make "p 360.0 / :sides / 2 fd :len / 2 / tan :p rt 90 bk :len / 2 ]
pd
repeat :sides [ fd :len rt 360.0 / :sides ]
pu setpos :oldPos pd
setheading :oldHeading
end
;画五角星
;参数1 五角星的中间点的x坐标
;参数2 五角星的中间点的x坐标
;参数3 五角星的边长
to star :centerX :centerY :len
local "oldPos
local "oldHeading
local "a
local "b
make "oldPos pos
make "oldHeading heading
make "a :len * cos 72
make "b :a / tan 36
pu
setxy :centerX :centerY
fd :b lt 90 fd :a
rt 108
pd
repeat 5 [ fd :len rt 144 fd :len lt 72 ]
pu setpos :oldpos pd
setheading :oldheading
end
; cube中参数x,y,z所指代的方向
; +--------+
; z/ /|
; +--------+ |
; |y | +
; | x |/
; +--------+
to cube :x :y :z
repeat 2 [ fd :y rt 90 fd :x rt 90 ]
fd :y
rt 45
fd :z / 2
rt 45
fd :x
rt 135
fd :z / 2
lt 45
fd :y
lt 135
fd :z / 2
lt 45
fd :y
end
====================
====================
例子1:
to polygon :len :sides
repeat :sides [ fd :len rt 360.0 / :sides ]
end
to myPic :len :rep
lt 90 pu fd 400 rt 90 pd ; fd 400 定位用,要根据自己的系统设定具体值
repeat :rep [ if 2 < repcount [ polygon :len repcount ] ]
end
myPic 100 20
效果图见 J:/skyDiary/Data/myPic.bmp
====================
例子2:
to myPrint :len
make "count 0
do.until [ print :count make "count :count + 1 ] [ :count > :len ]
end
myPrint 5
输出结果为:
0
1
2
3
4
5
====================
例子3:
用logo写的haino程序
make "steps 1
to haino :size :from :mid :to
if :size = 0 [ stop ]
haino :size - 1 :from :to :mid
print ( se :steps :from "-> :to )
make "steps :steps + 1
haino :size - 1 :mid :from :to
end
haino 3 "a "b "c
输出结果为:
1 a -> c
2 a -> b
3 c -> b
4 a -> c
5 b -> a
6 b -> c
7 a -> c
====================
例子4:
用logo做的九九乘法表
make "myLeft -550
make "myBottom 0
make "myWidth 100
make "myHeight 30
to myLocate :x :y
pu
setxy :myLeft + :x * :myWidth :myBottom + :y * :myHeight
pd
setheading 90
repeat 2 [ fd :myWidth rt 90 fd :myHeight rt 90 ]
pu
setxy :myLeft + :x * :myWidth + 5 :myBottom + :y * :myHeight - 5
pd
setheading 90
end
to table99
for [ i 1 9 1 ] [ for [ j 1 9 1 ] [ myLocate :i 10 - :j label ( se :i "* :j "= :i * :j ) ] ]
end
table99
pu setxy :myLeft + :myWidth * 4.5 :myBottom + :myHeight * 10 pd
label "九九乘法表
ht
结果见 j:/skyDiary/data/table[9by9].bmp
====================
例子5:
用logo画超立方体
to hyperCube :len
pu setxy 0 - :len - :len / 5 :len / 2 pd
setpencolor [ 0 0 255 ]
setpensize [ 2 2 ]
setheading 90
repeat 8 [ box :len rt 90 fd :len lt 135 ]
end
to box :len
repeat 4 [ fd :len rt 90 ]
end
hyperCube 100
ht
setactivearea [ -200 -200 200 200 ]
( gifsave "hyperCube.gif )
效果图见 j:/skyDiary/data/hyperCube.gif
====================
例子6:
用logo建立基本几何形的函数库
;画正三角形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正三角形的边长
to triangel :centerX :centerY :len
local "oldPos
local "oldHeading
make "oldPos pos
make "oldHeading heading
pu setxy :centerX :centerY fd :len / sqrt 3 pd
rt 150
repeat 3 [ fd :len rt 120 ]
pu setpos :oldPos pd
setheading :oldHeading
end
;画正方形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方形的边长
to rect :centerX :centerY :len
polygon :centerX :centerY :len 4
end
;画正五边形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方五边形的边长
to pentagon :centerX :centerY :len
local "oldPos
local "oldHeading
make "oldPos pos
make "oldHeading heading
pu setxy :centerX :centerY fd :len / 2 / cos 54 pd
rt 126
repeat 5 [ fd :len rt 72 ]
pu setpos :oldPos pd
setheading :oldHeading
end
;画正六边形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方六边形的边长
to hexagon :centerX :centerY :len
polygon :centerX :centerY :len 6
end
;画正多边形
;参数1 中间点的x坐标
;参数2 中间点的y坐标
;参数3 正方多边形的边长
;参数4 几何形的边数,如果3表示要画正三角形,4表示要画正方形,5表示要画正五边形...
to polygon :centerX :centerY :len :sides
local "oldPos
local "oldHeading
make "oldPos pos
make "oldHeading heading
pu
setxy :centerX :centerY
if ( modulo :sides 2 ) = 1 [ make "p ( 180 - 360.0 / :sides ) / 2 fd :len / 2 / cos :p rt 180 - :p ]
if ( modulo :sides 2 ) = 0 [ make "p 360.0 / :sides / 2 fd :len / 2 / tan :p rt 90 bk :len / 2 ]
pd
repeat :sides [ fd :len rt 360.0 / :sides ]
pu setpos :oldPos pd
setheading :oldHeading
end
;画五角星
;参数1 五角星的中间点的x坐标
;参数2 五角星的中间点的x坐标
;参数3 五角星的边长
to star :centerX :centerY :len
local "oldPos
local "oldHeading
local "a
local "b
make "oldPos pos
make "oldHeading heading
make "a :len * cos 72
make "b :a / tan 36
pu
setxy :centerX :centerY
fd :b lt 90 fd :a
rt 108
pd
repeat 5 [ fd :len rt 144 fd :len lt 72 ]
pu setpos :oldpos pd
setheading :oldheading
end
; cube中参数x,y,z所指代的方向
; +--------+
; z/ /|
; +--------+ |
; |y | +
; | x |/
; +--------+
to cube :x :y :z
repeat 2 [ fd :y rt 90 fd :x rt 90 ]
fd :y
rt 45
fd :z / 2
rt 45
fd :x
rt 135
fd :z / 2
lt 45
fd :y
lt 135
fd :z / 2
lt 45
fd :y
end
====================
本文通过六个实例介绍MSWLogo编程语言的基本语法和应用,包括绘制多边形、打印数字序列、实现Haino程序、绘制九九乘法表、画超立方体以及创建几何形状函数库。每个例子都有详细的代码解释和运行效果。
691





