当前位置: 首页 > news >正文

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

机器人的表情有两种,一种是贴图,一钟是调用图形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();
}

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

这是使用心形曲线

这是使用螺旋曲线

这是使用大圆小圆相交

http://www.lryc.cn/news/511777.html

相关文章:

  • orm01
  • Maven 测试和单元测试介绍
  • Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言
  • UE5 丧尸类杂兵的简单AI
  • Linux字符设备驱动开发的三种方式(分析+对比+示例)
  • C++设计模式之行为型模式概述,它们的目的与特点
  • 把Huggingface下载的arrow数据集转化为json格式
  • 复习打卡大数据篇——Hadoop YARN
  • fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值
  • Linux 基本指令
  • GO语言基础面试题
  • 要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量
  • 小程序基础 —— 10 如何调试小程序代码
  • Vue项目如何设置多个静态文件;如何自定义静态文件目录
  • CentOS Stream 9 安装 JDK
  • 前端(htmlcss)
  • py打包工具
  • 华为OD E卷(100分)39-最长子字符串的长度(二)
  • Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案
  • JSON结构快捷转XML结构API集成指南
  • 【视觉惯性SLAM:四、相机成像模型】
  • 网络编程:TCP和UDP通信基础
  • 声波配网原理及使用python简单的示例
  • 深度学习任务中的 `ulimit` 设置优化指南
  • 【学生管理系统】权限管理
  • Java编程题_面向对象和常用API01_B级
  • JUC并发工具---线程协作
  • Excel for Finance 08 `XNPV`和`XIRR` 函数
  • 嵌入式入门Day35
  • AE/PR/达芬奇模板:自动光标打字机文字标题移动效果动画模板预设