【掌控】新技能: 画圆

2018-12-216835
AI 快速预览详细 收起
本文介绍了使用掌控板绘制圆的方法,包括空心圆、实心圆及动态效果。通过oled.circle和oled.fill_circle函数,可以轻松实现这些图形。文章还详细解释了加速度传感器的读数转换为OLED坐标的具体算法,帮助理解动态圆的实现原理。适用于STEM教育和编程启蒙,适合初学者学习基本图形绘制。


掌控新技能:画圆

【掌控】新技能: 画圆图1

【新技能】

oled.circle(x, y, radius, c)

绘制圆

x 、y -圆心坐标。radius -圆半径大小  c -为1时,像素点亮;c 为0时,像素点灭。


oled.fill_circle(x, y, radius, c)


x 、y -圆心坐标。radius -圆半径大小  c -为1时,像素点亮;c 为0时,像素点灭。

【空心圆】
# 画空心圆代码
from mpython import *
# 半径 中心x y坐标
radius = 10
center_x = 64
center_y = 32

oled.fill(0)
oled.circle(center_x, center_y, radius, 1)
oled.show()

【实心圆】
[mw_shl_code=python,true]# 画实心圆代码
from mpython import *
# 半径 中心x y坐标
radius = 8
center_x = 64
center_y = 32

oled.fill(0)
oled.fill_circle(center_x, center_y, radius, 1)
oled.show()[/mw_shl_code]

【右移的圆】
[mw_shl_code=python,true]# 右移的圆
from mpython import *

# 半径 中心x y坐标
radius = 8
while 1:
    for i in range(128):
        center_x = i
        center_y = 32
        oled.fill(0)
        oled.circle(center_x, center_y, radius, 1)
        oled.show()
        [/mw_shl_code]

【重力小球】
[mw_shl_code=python,true]# 重力小球
from mpython import *

# 半径 中心x y坐标
radius = 10
        
center_x = 0
center_y = 0
while True:
    x = accelerometer.get_y()
    y = accelerometer.get_x()
    oled.fill(0)
    center_x = 128-int(x*64+64)
    center_y = int(y*32+32)
    oled.fill_circle(center_x, center_y, radius, 1)
    oled.show()[/mw_shl_code]


上面的代码中,要理解的是这几句的算法:
    x = accelerometer.get_y()
    y = accelerometer.get_x()

    center_x = 128-int(x*64+64)
    center_y = int(y*32+32)

【小知识】
为什么是X获取加速度Y向,而y获取加速度X向的值。

加速度传感器能够测量由于重力引起的加速度,传感器在加速过程中,通过对质量块所受惯性力的测量,利用牛顿第二定律获得加速度值。掌控板上的加速度计可测量加速度,测量范围为 -2g 到 +2g 之间。

掌控板的测量沿3个轴,每个轴的测量值是正数或负数,正轴越趋近重力加速度方向,其数值往正数方向增加,反之往负数方向减小,当读数为 0 时,表示沿着该特定轴“水平”放置。

  • X - 向前和向后倾斜。
  • Y - 向左和向右倾斜。
  • Z - 上下翻转。


加速度的读数范围是1和-1之间,左向为正,右向为负。
所以在把加速度值转化为OLED坐标,用了这个式子:center_x = 128-int(x*64+64)    int()是取整函数
当加速度y为1时,状态是向左倾,x*64+64=128 ,取整后128-int(x*64+64)=0,是屏幕的最左点。
当加速度y为-1时,状态是向右倾,x*64+64=0 ,取整后128-int(x*64+64)=128,是屏幕的最左点。
center_y = int(y*32+32)
向上向下倾类似。

【上升气泡】
[mw_shl_code=python,true]# 上升气泡
from mpython import *

# 半径 中心x y坐标
radius = 10
        
center_x = 0
center_y = 0
while True:
    x = accelerometer.get_y()
    y = accelerometer.get_x()
    oled.fill(0)
    center_x = 128-int(x*64+64)
    center_y = int(y*32+32)
    oled.circle(128-center_x, 64-center_y, radius, 1)
    oled.show()

[/mw_shl_code]


这个代码,重点在这里

oled.circle(128-center_x, 64-center_y, radius, 1)

通过减法实现方向改变。

【掌控】新技能: 画圆图2

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -