rzyzzxw 发表于 2018-12-21 13:56:48

【掌控】新技能: 画圆

本帖最后由 rzyzzxw 于 2018-12-21 17:20 编辑

掌控新技能:画圆



【新技能】

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()

【实心圆】
# 画实心圆代码
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()

【右移的圆】
# 右移的圆
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()
      

【重力小球】
# 重力小球
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()


上面的代码中,要理解的是这几句的算法:
    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 - 上下翻转。
https://mpython.readthedocs.io/zh/latest/_images/xyz.png

加速度的读数范围是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)
向上向下倾类似。

【上升气泡】
# 上升气泡
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()




这个代码,重点在这里

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

通过减法实现方向改变。


页: [1]
查看完整版本: 【掌控】新技能: 画圆