嵌入式开发中的机器人表情绘制

机器人的表情有两种,一种是贴图,一钟是调用图形API自绘。

贴图效果相对比较好,在存储空间大的情况下是可以采用的。

自绘比较麻烦,但在资源和空缺少的情况下,也是很有用的。而且自绘很容易通过调整参数加入随机效果,产生各种让人惊叹的作品。自绘特别适合一些平台配置低,api少的场合,比如有些平台只有点线等基本函数,画个圆或者正方形都需要自己使用手动实现。

在屏幕上绘图一般使用直角坐标或者极坐标,事实上往往取决于平台的处理器和硬件配置和需要的复杂度来取舍。这个十分简单,只用到高中解析几何的知识,

通过基本api画圆

复制代码
//如果不画圆圈画圆面,把圆的方式if ((i-x)*(i-x)+(j -y)*(j-y)==r*r)改为<=,
//这种方式很容易理解,但效率低,循环次数和比较次数都很多
void drawCircle(int x, int y, int r) {
  display.clear();
  for (int i = x - r; i <= x + r; i++) {
    for (int j = y - r; j <= y + r; j++) {
      if ((i - x) * (i - x) + (j - y) * (j - y) <= r * r) {
        display.drawPixel(i, j, SSD1306_WHITE);
      }
    }
  }
  display.update();
}
//对比一下,这样就省了一层循环
void drawCircle2(int x, int y, int r) {
  display.clear();
  for (int i = x - r; i <= x + r; i++) {
    //for (int j = y - r; j <= y + r; j++) {
    //  if ((i - x) * (i - x) + (j - y) * (j - y) == r * r) {
    //    display.drawPixel(i, j, SSD1306_WHITE);
    //  }
    //}
    int _x =i;
    int _y = sqrt(r*r - (_x-x)*(_x-x))+y;
    int __y = y - sqrt(r*r - (_x-x)*(_x-x));
    display.drawPixel(_x, _y, SSD1306_WHITE);
    display.drawPixel(_x, __y, SSD1306_WHITE);
  }
  display.update();
}
//极坐标,可以通过步数优化效率,也可以把所有的点存起来,这样浪费空间但节省一半计算
void drawCircle3(int x, int y, int r) {
  display.clear();
  for (int theta = 0; theta <= 360; theta += 2) {
    float rad = theta * 3.14159 / 180;
    int _x = x + r*cos(rad);
    int _y = y + r*sin(rad);
    float rad2 = (theta-2) * 3.14159 / 180;
    int _x1 = x + r*cos(rad2);
    int _y1 = y + r*sin(rad2);
    display.drawLine(_x1, _y1, _x, _y, SSD1306_WHITE);
  }
  display.update();
}

通过研究常见的圆方程和绘制方式,就可以举一翻三,利用抛物线,双曲线,心形,螺旋线,画出各种特殊的图形,还可以加上动画,比如笑脸,心形,眩晕等表情:

这是使用心形曲线

这是使用螺旋曲线

这是使用大圆小圆相交

相关推荐
triticale9 分钟前
【Java】网络编程(Socket)
java·网络·socket
淘源码d12 分钟前
什么是ERP?ERP有哪些功能?小微企业ERP系统源码,SpringBoot+Vue+ElementUI+UniAPP
java·源码·erp·erp源码·企业资源计划·企业erp·工厂erp
源码方舟13 分钟前
【基于ALS模型的教育视频推荐系统(Java实现)】
java·python·算法·音视频
蜗牛沐雨15 分钟前
Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
开发语言·后端·rust
Python私教16 分钟前
Rust快速入门:从零到实战指南
开发语言·后端·rust
Mcworld85742 分钟前
整数分解JAVA
java·开发语言
请你喝好果汁6411 小时前
python_竞态条件
开发语言·python
正在走向自律1 小时前
Python 数据分析与可视化:开启数据洞察之旅(5/10)
开发语言·人工智能·python·数据挖掘·数据分析
fancy1661661 小时前
力扣top100 矩阵置零
人工智能·算法·矩阵
小南家的青蛙1 小时前
LeetCode面试题 01.09 字符串轮转
java·leetcode