【掌控】mpython-20…画圈圈,一起画圈圈
弯弯绕,绕弯弯,宝宝画圈圈,圈圈画的圆圆?问问圈圈,问问圆圆。哈哈,一首绕口令送给大家。
前面的画过点,线,方形,今天一起画圈圈。
【小思考】
掌控有个小屏幕,用它就可以玩出好多花样。
在学python时,有学到海龟库,画图很方便,特别是可以画曲线,可以有左转,右转,前进,后退……
可是mpython的画图功能不够,我在群里给工程师提了建议,哈哈,谢作如老师也有这样的提议。
在没有出来之前,我还是想画圈圈。
怎么办。
【小启发】
启发来源于向金老师的一个程序,玫瑰曲线。
很荣幸大师的文章由我代发到DF论坛。
在试玩中,我发现有一个状态,可以画出圆来。
哈哈,借用其中的一段,改成今天的画圈圈。
【开始画一个圆】
from mpython import *
import math# 引入数学库文件
#输入圆起点坐标(圆最上面的点,不是圆心)和半径
x = 64
y = 0
r = 30
#自定义函数,绘制一个圆
def DrawRoseCurve(a):
for t in range(0,360): # 循环次数,由于是画一圈,所以是360;可以自行设定
X = math.floor(math.cos(t)*a*math.sin(t)) # 计算x坐标的值,注意:这里需要取整
Y = math.floor(math.sin(t)*a*math.sin(t)) # 计算y坐标的值,并且取整
display.pixel(X+x,Y+y,1) # 显示坐标像素点,为什么要+x、+y,哪是因为要把坐标(x,y)作为起点
display.show() # 执行
d = 2 * r # 直径d
display.fill(0)
DrawRoseCurve(d)
代码里有注解,不多讲了,至于向老师代码中的算法,自己理解吧(我也不懂啦)。{:5_131:}
【内切圆?】
from mpython import *
import math# 引入数学库文件
#输入圆起点坐标(圆最上面的点,不是圆心)
x = 64
y = 0
#自定义函数,绘制一个圆
def DrawRoseCurve(a):
for t in range(0,360): # 循环次数,由于是画一圈,所以是360;可以自行设定
X = math.floor(math.cos(t)*a*math.sin(t)) # 计算x坐标的值,注意:这里需要取整
Y = math.floor(math.sin(t)*a*math.sin(t)) # 计算y坐标的值,并且取整
display.pixel(X+x,Y+y,1) # 显示坐标像素点,为什么要+x、+y,哪是因为要把坐标(x,y)作为起点
display.show() # 执行
display.fill(0)
for i in range(1, 7):
d = 2 * i * 5 # 直径d
DrawRoseCurve(d)
【同心圆】
from mpython import *
import math# 引入数学库文件
#自定义函数,绘制一个圆
def DrawRoseCurve(a):
for t in range(0,360): # 循环次数,由于是画一圈,所以是360;可以自行设定
X = math.floor(math.cos(t)*a*math.sin(t)) # 计算x坐标的值,注意:这里需要取整
Y = math.floor(math.sin(t)*a*math.sin(t)) # 计算y坐标的值,并且取整
display.pixel(X+x,Y+y,1) # 显示坐标像素点,为什么要+x、+y,哪是因为要把坐标(x,y)作为起点
display.show() # 执行
display.fill(0)
#输入圆起点x坐标(圆最上面的点,不是圆心)
x = 64
for i in range(1, 7):
y = 32 - i * 5 #圆起点y坐标
d = 2 * i * 5 # 直径d
DrawRoseCurve(d)
【李时念老师的画圆代码】
大家可以研究下,获取更多的启发。
#画圆 代码作者 李时念老师
from mpython import *
import math
def drawcircle(x,y,r,color,full = 0) :
if(full == 0) :
for i in range(x-r,x+r+1):
display.pixel(i,int(y-math.sqrt(r*r-(x-i)*(x-i))),color)
display.pixel(i,int(y+math.sqrt(r*r-(x-i)*(x-i))),color)
for i in range(y-r,y+r+1):
display.pixel(int(x-math.sqrt(r*r-(y-i)*(y-i))),i,color)
display.pixel(int(x+math.sqrt(r*r-(y-i)*(y-i))),i,color)
else :
for i in range(x-r,x+r+1):
a = int(math.sqrt(r*r-(x-i)*(x-i)))
display.vline(i, y - a, a * 2,color)
for i in range(y-r,y+r+1):
a = int(math.sqrt(r*r-(y-i)*(y-i)))
display.hline(x - a, i, a * 2, color)
display.fill(0)
drawcircle(64, 32, 32, 1, 0)
drawcircle(64, 32, 24, 1, 1)
drawcircle(64, 32, 16, 0, 0)
drawcircle(64, 32, 8, 0, 1)
display.show()
【小结一下】
这个画圈圈只能做些静态的圆,要让它动起来,就不行了。
不过也很有趣了呢。
在还没有掌控版海龟库的时候,也胜过没有呢。
【小拓展】
结合加速度计,做个水平仪如何。
虽然慢点,在屏幕上画些有些变化圈圈,也有很多玩法呢。
掌控,为编程教育而生,如果就此,把孩子们学python的兴趣调动起来,也不错呢。
页:
[1]