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

机器人的表情有两种,一种是贴图,一钟是调用图形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.mzph.cn/diannao/65718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Halcon】数据结构汇总

一、图形参数 图像(Image) 由像素、通道和域三个部分组成。像素类型包括灰度图像(byte和uint2)和差异图像(int1和int2)等。通道表示图像的颜色或光谱信息,彩色图像通常由红、绿、蓝三个通道组成。域可以理解为感兴趣区域(ROI),用于限制图像处理算子的作用范围。区域(…

v3.0.8- 「S+会员」新增专属运动秀,试试新穿搭吧- 与「好友」

v3.0.8 - 「S会员」新增专属运动秀&#xff0c;试试新穿搭吧 - 与「好友」互动支持前往对方所在的「在线运动房」 - 「运动秀工坊」新增智能背景抠图 - 「体育竞技」匹配中可以看到我和对手的装备 - 多项界面体验和性能优化 v2.0.17 - 班级运动场新增运动秀展示 - 班级玩法&…

leetcode108:将有序数组转化为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确…

【机器学习】概述

文章目录 1. 机器学习三步骤2. 机器学习图谱2.1 任务类型 (Task)2.2 模型选择 (Methods)2.3 学习场景 (Scenario) 1. 机器学习三步骤 定义一个模型 (Define a set of function) 选择一组合适的函数来表示模型。 评估模型好坏 (Goodness of function) 找到一个损失函数&#xf…

服务器主机测试网络

测试命令 speedtest-cli sudo yum install python-pip pip install speedtest-cli # 默认连接国外被拒绝&#xff0c;用阿里云 pip install -i https://mirrors.aliyun.com/pypi/web/simple --trusted-host mirrors.aliyun.com speedtest-cli Collecting speedtest-cliDownlo…

01-2023年上半年软件设计师考试java真题解析

1.真题内容 在某系统中&#xff0c;类 Interval(间隔) 代表由下界(lower bound(边界))上界(upper bound )定义的区间。 要求采用不同的格式显示区间范围。 如&#xff3b;lower bound , upper bound ]、[ lower bound … upper bound ]、[ lower bou nd - upper bound &#x…

svn分支相关操作(小乌龟操作版)

在开发工作中进行分支开发&#xff0c;涉及新建分支&#xff0c;分支切换&#xff0c;合并分支等 新建远程分支 右键选择branch/tagert按钮 命名分支的路径名称 点击确定后远程分支就会生成一个当时命名的文件夹&#xff08;开发分支&#xff09; 分支切换 一般在开发阶段&a…

Vue中接入萤石等直播视频(更新中ing)

一、萤石&#xff1a; 1. 萤石云开发文档&#xff1a; https://open.ys7.com/help/31 2、安装&#xff1a; npm install ezuikit-js --save 3、在文件中引用&#xff1a;import EZUIKit from ezuikit-js 4、具体代码&#xff1a; 获取accessToken&#xff1a;https://open.…

【每日学点鸿蒙知识】模拟器开启网络、长时任务、兼容性测试支持、丢帧定位、SO中访问rawfile等

1、模拟器如何开启网络&#xff1f; 模拟器使用的是电脑本身的网络&#xff0c;不通过代理即可访问网络。 2、创建子window后&#xff0c;锁屏很短时间内&#xff0c;应用会被杀死&#xff1f; 没开长时任务&#xff0c;锁屏和退后台保活要开长时任务。 应用退至后台后&…

HarmonyOS-面试整理

目录 为什么选择HarmonyOS/ 优点/特点鸿蒙系统的权限有哪些说一说鸿蒙系统的安全机制说一说鸿蒙系统的微内核与安卓的内核区别鸿蒙操作系统的微内核架构有哪些优势分布式能力在鸿蒙系统中如何实现请解释一下鸿蒙系统中的分布式软总线技术如何在鸿蒙操作系统中进行多设备协同开发…

Python中PDF转Word的技术

Python PDF转Word技术概述 在日常办公和数据处理中&#xff0c;经常需要将PDF文档转换为Word文档&#xff0c;以便进行编辑、修改或格式调整。Python作为一种强大的编程语言&#xff0c;提供了多种库和工具来实现这一功能。以下是对Python中PDF转Word技术的详细介绍。 一、技…

功率器件热设计基础(四)——功率半导体芯片温度和测试方法

/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础&#xff0c;只有掌握功率半导体的热设计基础知识&#xff0c;才能完成精确热设计&#xff0c;提高功率器件的利用率&#xff0c;降低系统成本&#xff0c;并保证系统的可靠性。 功率器件热设计基础系列文章会…

naive ui 安装

注意&#xff0c;naive-ui 仅支持 Vue3。如果你在使用 Vue2&#xff0c;可以去看看别的库。 npm 使用 npm 安装。 npm i -D naive-ui UMD 参考 使用 UMD。 字体 npm i -D vfonts 图标 naive-ui 建议使用 xicons 作为图标库。

Kafka消息不丢失与重复消费问题解决方案总结

1. 生产者层面 异步发送与回调处理 异步发送方式&#xff1a;生产者一般使用异步方式发送消息&#xff0c;异步发送有消息和回调接口两个参数。在回调接口的重写方法中&#xff0c;可通过异常参数判断消息发送状态。若消息发送成功&#xff0c;异常参数为null&#xff1b;若发…

linux-centos-安装miniconda3

参考&#xff1a; 最新保姆级Linux下安装与使用conda&#xff1a;从下载配置到使用全流程_linux conda-CSDN博客 https://blog.csdn.net/qq_51566832/article/details/144113661 Linux上删除Anaconda或Miniconda的步骤_linux 删除anaconda-CSDN博客 https://blog.csdn.net/m0_…

JDK7 与 JDK8 的 HashMap 的区别

JDK7 与 JDK8 的 HashMap 的区别&#xff1a; 项JDK7JDK8数据结构数组 链表。 复杂度&#xff1a;O(n)数组 链表 红黑树 &#xff08;若链表长度大于等于8 且容量小于64 会进行扩容&#xff1b;若链表长度大于8 且数组长度大于等于64&#xff0c;会转化为红黑树&#xff08…

【每日学点鸿蒙知识】Taro、native层获取文件宽度、位置变化callback、数据迁移、oh_modules说明等

1、Taro开发HarmonyOS NEXT有相应的开发文档吗&#xff1f; Taro Harmony Hybrid容器是为让Taro小程序代码可以完整的运行在鸿蒙单内核系统里&#xff0c;在Taro H5平台的基础上&#xff0c;基于原生壳工程的jsbridge能力&#xff0c;扩展H5平台不支持的小程序Api能力&#xf…

pycharm+anaconda创建项目

pycharmanaconda创建项目 安装&#xff1a; Windows下PythonPyCharm的安装步骤及PyCharm的使用-CSDN博客 详细Anaconda安装配置环境创建教程-CSDN博客 创建项目&#xff1a; 开始尝试新建一个项目吧&#xff01; 选择好项目建设的文件夹 我的项目命名为&#xff1a;pyth…

前端(九)js介绍(2)

js介绍(2) 文章目录 js介绍(2)一、函数1.1函数的两种形式1.2函数的作用域1.3声明与提升 二、bom操作三、dom操作 一、函数 1.1函数的两种形式 //有参函数 //js中的函数只能返回一个值&#xff0c;如果要返回多个需要放在数组或对象中 function func(a,b){return ab } func(1,…

京准科普:车辆测速网络时间同步系统的概述

京准科普&#xff1a;车辆测速网络时间同步系统的概述 采用毫秒级标准NTP时间同步服务器检定区间测速系统主要用于指导测量车辆在特定区间内的平均速度&#xff0c;以确保交通法规的严格执行&#xff1b;以下是详细的解决方案&#xff1a; 1. 系统需求分析 高精度时间同步&am…