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

U8G2库使用案例(stm32)

目录

一、小球在 OLED 屏幕平面内运动并碰撞反弹的效果

二、 简单的波形生成和显示程序:

三、三维三角形旋转展示

四、正方形平面内顺时针旋转

五、带有旋转点的空心圆圈应用

六、字幕滚动效果

七、下雪动画效果

八、进度条动画效果


自己移植的U8g2库,OLED库超好用,自己封装了用户层不需要再去查资料使用,注释写的很多很详细,有示例上手就会,初始化也很简单

个人移植的U8g2库:

超简单的stm32 U8g2移植

  大家可以自己去官网移植,也可以用我的         U8G2官网

  很多大家都可以举一反三

一、小球在 OLED 屏幕平面内运动并碰撞反弹的效果

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/// 小球结构体,包含位置、速度等信息
typedef struct {int16_t x;int16_t y;int16_t vx;  // x方向速度int16_t vy;  // y方向速度uint8_t radius;  // 小球半径
} Ball;// 初始化小球的位置和速度
void init_ball(Ball *ball) {ball->x = 10;ball->y = 10;ball->vx = 2;ball->vy = 2;ball->radius = 5;
}// 更新小球的位置,处理边界碰撞
void update_ball_position(Ball *ball, u8g2_uint_t screen_width, u8g2_uint_t screen_height) {// 更新x坐标ball->x += ball->vx;// 检查是否碰到左右边界,碰到则反弹if (ball->x <= ball->radius || ball->x >= screen_width - ball->radius) {ball->vx = -ball->vx;}// 更新y坐标ball->y += ball->vy;// 检查是否碰到上下边界,碰到则反弹if (ball->y <= ball->radius || ball->y >= screen_height - ball->radius) {ball->vy = -ball->vy;}
}// 在OLED屏幕上绘制小球
void draw_ball(Ball ball) {WU_OLED_U8G2_DrawDisc(ball.x, ball.y, ball.radius, U8G2_DRAW_ALL);
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/OLED_WUStartTask04(void *argument)
{Ball my_ball;init_ball(&my_ball);while(1){//Wu_oled_Proc();// 清空缓冲区WU_OLED_U8G2_ClearBuffer();// 获取屏幕宽度和高度u8g2_uint_t screen_width = WU_OLED_U8G2_GetDisplayWidth();u8g2_uint_t screen_height = WU_OLED_U8G2_GetDisplayHeight();// 更新小球位置update_ball_position(&my_ball, screen_width, screen_height);// 绘制小球draw_ball(my_ball);// 刷新缓冲区,显示内容到OLED屏幕WU_OLED_U8G2_SendBuffer();//osDelay(50);}
}

二、 简单的波形生成和显示程序:

#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include "../../WU/OLED_U8g2/U8g2/WU_U8g2_Init.h"
#include "USER_OLED.h"
#include "../../WU/OLED_U8g2/U8g2/u8g2.h"// 定义屏幕的宽度和高度
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64// 定义波形参数
#define WAVE_AMPLITUDE 20  // 波形的振幅
#define WAVE_FREQUENCY 0.2 // 波形的频率(加快频率)// 初始化波形数据
void InitWave(void) {// 无需初始化,因为每次都会重新计算正弦波
}// 更新波形数据(生成正弦波)
void UpdateWave(uint8_t *waveData, float time) {for (int i = 0; i < SCREEN_WIDTH; i++) {// 计算正弦波的值,并将其映射到屏幕范围内float value = WAVE_AMPLITUDE * sin(WAVE_FREQUENCY * (i + time));waveData[i] = SCREEN_HEIGHT / 2 + (uint8_t)value;}
}// 绘制波形
void DrawWave(uint8_t *waveData) {// 清空屏幕WU_OLED_U8G2_ClearBuffer();// 绘制波形for (int i = 0; i < SCREEN_WIDTH; i++) {// 确保波形在屏幕范围内if (waveData[i] < SCREEN_HEIGHT) {WU_OLED_U8G2_DrawPixel(i, waveData[i]);}}// 刷新发送缓冲区WU_OLED_U8G2_SendBuffer();
}// 主函数
int main(void) {uint8_t waveData[SCREEN_WIDTH];  // 存储每个像素点的Y坐标float time = 0;                  // 时间变量,用于生成动态波形// 初始化OLEDWU_OLED_U8G2_Init();// 主循环while (1) {// 更新波形数据UpdateWave(waveData, time);// 绘制波形DrawWave(waveData);// 更新时间(加快波形移动速度)time += 1.0;// 延时一段时间,控制波形刷新速度(减少延时时间)// 这里假设有一个延时函数 delay_ms//delay_ms(20);  // 将延时时间从50ms减少到20ms}return 0;
}

三、三维三角形旋转展示

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/// 定义更大的三角形在三维空间中的三个顶点坐标
float triangleVertices[3][3] = {{-15, -15, 0},  // 第一个顶点,调整了坐标使三角形更大{15, -15, 0},   // 第二个顶点{0, 15, 0}      // 第三个顶点
};// 用于记录绕X、Y、Z轴旋转的角度
float angleX = 0;
float angleY = 0;
float angleZ = 0;// 旋转角度的增量,这里固定一个合适的速度,可按需调整
const float angleIncrement = 0.03;// 投影平面距离视点(类似相机到投影平面的距离,影响投影效果,可调整)
const float projectionPlaneDistance = 8;// 转换三维坐标到二维屏幕坐标(简单的正投影示例,实际可替换为更复杂的投影算法比如透视投影等)
void project3DTo2D(float point3D[3], float* x2D, float* y2D) {// 先绕X轴旋转float rotatedX = point3D[0];float rotatedY = point3D[1] * cos(angleX) - point3D[2] * sin(angleX);float rotatedZ = point3D[1] * sin(angleX) + point3D[2] * cos(angleX);// 再绕Y轴旋转rotatedX = rotatedX * cos(angleY) + rotatedZ * sin(angleY);rotatedZ = -rotatedX * sin(angleY) + rotatedZ * cos(angleY);// 接着绕Z轴旋转rotatedX = rotatedX * cos(angleZ) - rotatedY * sin(angleZ);rotatedY = rotatedX * sin(angleZ) + rotatedY * cos(angleZ);// 进行正投影,将三维坐标投影到二维平面(这里假设投影平面平行于XY平面,且在Z轴固定位置)*x2D = rotatedX * projectionPlaneDistance / (rotatedZ + projectionPlaneDistance);*y2D = rotatedY * projectionPlaneDistance / (rotatedZ + projectionPlaneDistance);// 转换坐标到屏幕坐标系(以屏幕中心为原点,根据屏幕尺寸进行偏移等调整)*x2D += 64;  // 这里假设屏幕宽度为128像素,取一半作为中心原点的X偏移量,可根据实际屏幕宽度调整*y2D += 32;  // 这里假设屏幕高度为64像素,取一半作为中心原点的Y偏移量,可根据实际屏幕高度调整
}// 绘制旋转后的空心三角形
void drawRotatedTriangle() {float x1, y1, x2, y2, x3, y3;// 对三角形的三个顶点分别进行投影转换project3DTo2D(triangleVertices[0], &x1, &y1);project3DTo2D(triangleVertices[1], &x2, &y2);project3DTo2D(triangleVertices[2], &x3, &y3);// 绘制空心三角形(使用绘制线的函数来连接三个顶点形成三角形)WU_OLED_U8G2_DrawLine(x1, y1, x2, y2);WU_OLED_U8G2_DrawLine(x2, y2, x3, y3);WU_OLED_U8G2_DrawLine(x3, y3, x1, y1);
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/OLED_WUStartTask04(void *argument)
{while(1){//Wu_oled_Proc();// 清空发送缓冲区WU_OLED_U8G2_ClearBuffer();// 绘制旋转后的空心三角形drawRotatedTriangle();// 更新旋转角度(分别绕X、Y、Z轴增加一定角度,实现旋转效果)angleX += angleIncrement;angleY += angleIncrement;angleZ += angleIncrement;if (angleX >= 2 * M_PI) angleX -= 2 * M_PI;if (angleY >= 2 * M_PI) angleY -= 2 * M_PI;if (angleZ >= 2 * M_PI) angleZ -= 2 * M_PI;// 刷新发送缓冲区,将绘制内容显示到屏幕上WU_OLED_U8G2_SendBuffer();// 可以添加适当延时,控制动画速度,这里简单示意,实际可根据需求调整延时时间//osDelay(50);}
}

四、正方形平面内顺时针旋转

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/// 定义正方形在三维空间中的四个顶点坐标,调整大小使其适配屏幕
float squareVertices[4][3] = {{-20, -20, 0},  // 左下角顶点{20, -20, 0},   // 右下角顶点{20, 20, 0},    // 右上角顶点{-20, 20, 0}    // 左上角顶点
};// 用于记录绕 Z 轴旋转的角度(仅绕 Z 轴旋转可实现平面内顺时针旋转)
float angleZ = 0;// 旋转角度的增量,用于控制旋转速度,可根据实际需求调整
const float angleIncrement = 0.05;// 投影平面距离视点(类似相机到投影平面的距离,影响投影效果,可调整)
const float projectionPlaneDistance = 5;// 转换三维坐标到二维屏幕坐标(简单的正投影示例,实际可替换为更复杂的投影算法比如透视投影等)
void project3DTo2D(float point3D[3], float* x2D, float* y2D) {// 先绕 Z 轴旋转float rotatedX = point3D[0] * cos(angleZ) - point3D[1] * sin(angleZ);float rotatedY = point3D[0] * sin(angleZ) + point3D[1] * cos(angleZ);float rotatedZ = point3D[2];// 进行正投影,将三维坐标投影到二维平面(这里假设投影平面平行于XY平面,且在Z轴固定位置)*x2D = rotatedX * projectionPlaneDistance / (rotatedZ + projectionPlaneDistance);*y2D = rotatedY * projectionPlaneDistance / (rotatedZ + projectionPlaneDistance);// 转换坐标到屏幕坐标系(以屏幕中心为原点,根据屏幕尺寸进行偏移等调整)*x2D += 64;  // 这里假设屏幕宽度为128像素,取一半作为中心原点的X偏移量,可根据实际屏幕宽度调整*y2D += 32;  // 这里假设屏幕高度为64像素,取一半作为中心原点的Y偏移量,可根据实际屏幕高度调整
}// 绘制旋转后的正方形
void drawRotatedSquare() {float x1, y1, x2, y2, x3, y3, x4, y4;// 对正方形的四个顶点分别进行投影转换project3DTo2D(squareVertices[0], &x1, &y1);project3DTo2D(squareVertices[1], &x2, &y2);project3DTo2D(squareVertices[2], &x3, &y3);project3DTo2D(squareVertices[3], &x4, &y4);// 绘制正方形的四条边WU_OLED_U8G2_DrawLine(x1, y1, x2, y2);WU_OLED_U8G2_DrawLine(x2, y2, x3, y3);WU_OLED_U8G2_DrawLine(x3, y3, x4, y4);WU_OLED_U8G2_DrawLine(x4, y4, x1, y1);
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/OLED_WUStartTask04(void *argument)
{while(1){//Wu_oled_Proc();// 清空发送缓冲区WU_OLED_U8G2_ClearBuffer();// 绘制旋转后的正方形drawRotatedSquare();// 更新旋转角度(绕 Z 轴增加一定角度,实现顺时针旋转效果)angleZ += angleIncrement;if (angleZ >= 2 * M_PI) angleZ -= 2 * M_PI;// 刷新发送缓冲区,将绘制内容显示到屏幕上WU_OLED_U8G2_SendBuffer();// 可以添加适当延时,控制动画速度,这里简单示意,实际可根据需求调整延时时间//osDelay(50);}
}

五、带有旋转点的空心圆圈应用

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/// 定义大空心圆圈的圆心坐标及半径
float bigCircleCenter[2] = {0, 0};
float bigCircleRadius = 25;// 定义实心小圆圈的初始坐标
float smallSolidCircle[3];// 用于记录实心小圆圈绕大空心圆圈旋转的角度
float circleAngle = 0;
const float circleAngleIncrement = 0.03;// 投影平面距离视点(类似相机到投影平面的距离,影响投影效果,可调整)
const float projectionPlaneDistance = 5;// 转换三维坐标到二维屏幕坐标(简单的正投影示例,实际可替换为更复杂的投影算法比如透视投影等)
void project3DTo2D(float point3D[3], float* x2D, float* y2D) {// 先绕 Z 轴旋转(针对实心小圆圈所在平面内旋转)float rotatedX = point3D[0];float rotatedY = point3D[1];float rotatedZ = point3D[2];// 进行正投影,将三维坐标投影到二维平面(这里假设投影平面平行于XY平面,且在Z轴固定位置)*x2D = rotatedX * projectionPlaneDistance / (rotatedZ + projectionPlaneDistance);*y2D = rotatedY * projectionPlaneDistance / (rotatedZ + projectionPlaneDistance);// 转换坐标到屏幕坐标系(以屏幕中心为原点,根据屏幕尺寸进行偏移等调整)*x2D += WU_OLED_U8G2_GetDisplayWidth() / 2;*y2D += WU_OLED_U8G2_GetDisplayHeight() / 2;
}// 绘制大空心圆圈
void drawBigHollowCircle() {float centerX, centerY;project3DTo2D(bigCircleCenter, &centerX, &centerY);WU_OLED_U8G2_DrawCircle(centerX, centerY, bigCircleRadius, U8G2_DRAW_ALL);
}// 绘制实心小圆圈并更新其位置(绕大空心圆圈旋转)
void drawRotatingSmallSolidCircle() {float x, y;// 根据旋转角度更新实心小圆圈的坐标smallSolidCircle[0] = bigCircleRadius * cos(circleAngle);smallSolidCircle[1] = bigCircleRadius * sin(circleAngle);project3DTo2D(smallSolidCircle, &x, &y);WU_OLED_U8G2_DrawDisc(x, y, 5, U8G2_DRAW_ALL);
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/OLED_WUStartTask04(void *argument)
{// 初始化实心小圆圈的坐标smallSolidCircle[0] = bigCircleRadius;smallSolidCircle[1] = 0;smallSolidCircle[2] = 0;while(1){//Wu_oled_Proc();// 清空发送缓冲区WU_OLED_U8G2_ClearBuffer();// 绘制大空心圆圈drawBigHollowCircle();// 绘制绕大空心圆圈旋转的实心小圆圈drawRotatingSmallSolidCircle();// 更新实心小圆圈绕大空心圆圈的旋转角度circleAngle += circleAngleIncrement;if (circleAngle >= 2 * M_PI) circleAngle -= 2 * M_PI;// 刷新发送缓冲区,将绘制内容显示到屏幕上WU_OLED_U8G2_SendBuffer();// 可以添加适当延时,控制动画速度,这里简单示意,实际可根据需求调整延时时间//osDelay(50);}
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

六、字幕滚动效果


void OLED_WUStartTask04(void *argument)
{const char* message = "祝大家新年快乐,恭喜发财!";  // 祝福语int messageWidth = WU_OLED_U8G2_GetUTF8Width(message);  // 获取祝福语的宽度int x = WU_OLED_U8G2_GetDisplayWidth();  // 获取屏幕宽度,初始x坐标为屏幕最右侧while (1){// 清空显示缓冲区WU_OLED_U8G2_ClearBuffer();// 绘制祝福语,x坐标逐渐减小,实现从右往左滚动效果WU_OLED_U8G2_SetFont(u8g2_font_wqy13_t_gb2312a);  // 设置字体,支持中文WU_OLED_U8G2_DrawUTF8(x, 32, message);  // 在指定位置绘制祝福语// 刷新显示WU_OLED_U8G2_SendBuffer();// 更新x坐标,实现滚动效果x--;// 如果祝福语完全滚出屏幕,重置x坐标if (x < -messageWidth) {x = WU_OLED_U8G2_GetDisplayWidth();}// 控制滚动速度,避免过快或过慢//osDelay(20);  // 20ms的延时,可以根据实际效果调整}
}

七、下雪动画效果

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/// 定义屏幕的宽度和高度,你可根据实际OLED屏幕尺寸修改
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64// 雪花结构体,用于表示每个雪花的属性
typedef struct Snowflake {int x;  // x坐标int y;  // y坐标int speed;  // 下落速度
} Snowflake;// 最大雪花数量,可以根据想要的下雪密度调整
#define MAX_SNOWFLAKES 50Snowflake snowflakes[MAX_SNOWFLAKES];// 初始化雪花的位置和速度
void initSnowflakes() {for (int i = 0; i < MAX_SNOWFLAKES; i++) {snowflakes[i].x = rand() % SCREEN_WIDTH;snowflakes[i].y = rand() % SCREEN_HEIGHT;snowflakes[i].speed = rand() % 3 + 1;  // 速度在1到3之间随机}
}// 更新雪花的位置,实现下落效果,超出屏幕底部则重新回到顶部
void updateSnowflakes() {for (int i = 0; i < MAX_SNOWFLAKES; i++) {snowflakes[i].y += snowflakes[i].speed;if (snowflakes[i].y > SCREEN_HEIGHT) {snowflakes[i].y = 0;snowflakes[i].x = rand() % SCREEN_WIDTH;}}
}// 在OLED屏幕上绘制雪花(白色像素点)
void drawSnowflakes() {WU_OLED_U8G2_SetDrawColor(1);  // 设置为白色,用于绘制雪花for (int i = 0; i < MAX_SNOWFLAKES; i++) {WU_OLED_U8G2_DrawPoint(snowflakes[i].x, snowflakes[i].y);}
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/OLED_WUStartTask04(void *argument)
{initSnowflakes();while(1){//Wu_oled_Proc();WU_OLED_U8G2_ClearBuffer();  // 清空缓冲区updateSnowflakes();drawSnowflakes();WU_OLED_U8G2_SendBuffer();  // 刷新缓冲区,将绘制内容显示到屏幕上// 可以添加适当延时,控制动画速度,这里简单示意,实际可根据需求调整延时时间//osDelay(50);}
}/*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

八、进度条动画效果

OLED_WUStartTask04(void *argument)
{int dat;while(1){//Wu_oled_Proc();while(dat<101){WU_OLED_U8G2_ClearBuffer();WU_OLED_U8G2_SetFont(u8g2_font_wqy13_t_gb2312a);//选择字库WU_OLED_U8G2_Printf(25,18,CHINA,"WU-有点东");WU_OLED_U8G2_DrawButtonUTF8(65, 35,  U8G2_BTN_SHADOW1|U8G2_BTN_HCENTER|U8G2_BTN_BW2, 0, 2, 2, "请等待初始化完成" );WU_OLED_U8G2_Printf(101,60,CHINA,"%d%%",dat);WU_OLED_U8G2_DrawRFrame(0, 50, 100,10,4);WU_OLED_U8G2_DrawRBox(0, 50, dat,10,4);WU_OLED_U8G2_SendBuffer();dat+=2;}WU_OLED_U8G2_DrawButtonUTF8(65, 35,  U8G2_BTN_SHADOW1|U8G2_BTN_HCENTER|U8G2_BTN_BW2|U8G2_BTN_INV, 0, 2, 2, "请等待初始化完成" );WU_OLED_U8G2_SendBuffer();dat=0;//osDelay(50);}
}

相关文章:

U8G2库使用案例(stm32)

目录 一、小球在 OLED 屏幕平面内运动并碰撞反弹的效果 二、 简单的波形生成和显示程序: 三、三维三角形旋转展示 四、正方形平面内顺时针旋转 五、带有旋转点的空心圆圈应用 六、字幕滚动效果 七、下雪动画效果 八、进度条动画效果 自己移植的U8g2库&#xff0c;OLED库…...

067B-基于R语言平台Biomod2模型的物种分布建模与数据可视化-高阶课程【2025】

课程培训包含&#xff1a;发票全套软件脚本学习数据视频文件导师答疑 本教程旨在通过系统的培训学习&#xff0c;学员可以掌握Biomod2模型最新版本的使用方法&#xff0c;最新版包含12个模型&#xff08;ANN, CTA, FDA, GAM, GBM, GLM, MARS, MAXENT, MAXNET, RF, SRE, XGBOOST…...

【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜

AI的两次寒冬&#xff1a;从感知机困局到深度学习前夜 引用&#xff08;中英双语&#xff09; 中文&#xff1a; “第一次AI寒冬&#xff0c;是因为感知机局限性被揭示&#xff0c;让人们失去了对算法可行性的信心。” “第二次AI寒冬&#xff0c;则是因为专家系统的局限性和硬…...

141.《mac m系列芯片安装mongodb详细教程》

文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…...

【Linux】sed编辑器

一、基本介绍 sed编辑器也叫流编辑器&#xff08;stream editor&#xff09;&#xff0c;它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器&#xff08;如Vim&#xff09;中&#xff0c;可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…...

unity3d-搞个场景漫游如何实现Alpha

要处理两个问题&#xff1a; 如何设置地面人不掉下去 方法一、 游戏物体加刚体&#xff0c;将游戏物体和地面加collider。如果是地形&#xff0c;可以使用 Terrain Collider&#xff1b;如果是简单的平面&#xff0c;可以添加 Box Collider 或者 Mesh Collider&#xff08;如果…...

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…...

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考&#xff0c;oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场&#xff0c;主要考察 nmap的使用已经是否会看输出&#xff0c;以及是否会通过应用查找对应漏…...

【简博士统计学习方法】3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…...

UnionTech OS Server 20 网页无法访问yum源地址

统信yum地址 https://euler-packages.chinauos.com/server-euler/fuyu/1060/everything/sw_64/Packages/ 浏览器访问401报错无权限&#xff0c;查看linux uos环境下yum配置的用户名和密码 cat /etc/yum/vars/auth_* 然后自己组装生成Basic Authorization def generate_basic_…...

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…...

jvm基础

jvm的基本结构‌‌ ‌类加载器&#xff08;ClassLoader&#xff09;‌&#xff1a;加载class文件到内存中进行使用。 ‌运行时数据区&#xff08;Runtime Data Area&#xff09;‌&#xff1a;这是JVM在运行Java程序期间管理的内存区域&#xff0c;包括方法区&#xff08;Meta…...

kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration

1.引言 作为一名&#xff08;坦白说有点懒的&#xff09;图像处理方向的研究生&#xff0c;说实话最近新开一个坑&#xff0c;可能是因为要寒假了比较无聊&#xff0c;这次带来的系列是kaggle数据处理竞赛的经典例题&#xff1a;纽约出租车行程时间问题。希望大家多多支持&…...

Python提取目标Json键值:包含子嵌套列表和字典

目标&#xff1a;取json中所有的Name、Age字典 思路&#xff1a;递归处理字典中直接包含子字典的情况&#xff0c; import jsondef find_targ_dicts(data,key1,key2):result {}if isinstance(data, dict):if key1 in data and key2 in data: # 第一层字典中包含key1和key2re…...

<div>{{ $t(“collectionPlan“) }}</div> 中的$t是什么

$t是Vue I18n插件提供的一种方法&#xff0c;用于根据当前应用的语言环境来获取相应的翻译文本。 以下是一个简单的示例&#xff0c;展示如何在Vue I18n中定义消息&#xff1a; const i18n new VueI18n({locale: en, // 设置默认语言messages: {en: {collectionPlan: Collec…...

医学图像分析工具01:FreeSurfer || Recon -all 全流程MRI皮质表面重建

FreeSurfer是什么 FreeSurfer 是一个功能强大的神经影像学分析软件包&#xff0c;广泛用于处理和可视化大脑的横断面和纵向研究数据。该软件由马萨诸塞州总医院的Martinos生物医学成像中心的计算神经影像实验室开发&#xff0c;旨在为神经科学研究人员提供一个高效、精确的数据…...

win32汇编环境,在对话框中画五边形与六边形

;运行效果 ;win32汇编环境,在对话框中画五边形与六边形 ;展示五边形与六边形的画法 ;将代码复制进radasm软件里,直接编译可运行.重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>&g…...

小白学Pytorch

小白学Pytorch 发现一个比较好的教程&#xff0c;对于自己来说比较合适&#xff0c;适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚&#xff1a; 我们使用nn包中的Sequential搭建网络&#…...

[A-25]ARMv8/v9-GIC的系统架构(中断的硬件基础)

ver0.1 前言 我们在观看很多的影视剧过程中,尤其是军旅体裁类型的布景中,经常会看见高级干部的办公桌上都会有几部电话机。这样的电话可不能小看,重要的事情尤其是突发和紧急的情况都要通过这几部电话第一时间通知给决策者。这几部电话,必须举报几个特点:及时性好、稳定…...

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...

学习threejs,导入AWD格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AWDLoader AWD模型加…...

C# 事件

目录 1、事件模型的5个组成部分2、使用内置委托类型声明事件2.1 EventHandler2.1.1 &#xff1f;2.1.2 this2.1.3 使用匿名函数和lamda表达式2.1.3.1 匿名函数2.1.3.2 lamda表达式 2.1.4 异常处理 2.2 EventHandler<TEventArgs> 3、使用自定义委托类型声明事件3.1 事件的…...

WebRtc02: WebRtc架构、目录结构、运行机制

整体架构 WebRtc主要分为三层&#xff1a; CAPI层&#xff1a;外层调用Session管理核心层&#xff1a;包括视频引擎、音频引擎、网络传输 可由使用者重写视频引擎&#xff1a;编解码器、视频缓存、视频增强音频引擎&#xff1a;编解码器、音频缓存、回音消除、降噪传输&#x…...

耐高压26V输入5V升压充电8.4V芯片

HU6877作为一款集成了26V高耐压保护的5V升压至8.4V两节锂电池充电管理IC&#xff0c;凭借其高效升压、智能充电管理、多重安全保护及高耐压特性&#xff0c;在高端手电筒、便携式医疗设备、无人机等领域展现出了广泛的应用前景。本文将详细探讨HU6877的技术特点、工作原理、应用…...

【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing

1 介绍 年份&#xff1a;2019 期刊&#xff1a; 2019CVPR 引用量&#xff1a;611 Dhar P, Singh R V, Peng K C, et al. Learning without memorizing[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019: 5138-5146. 本文提…...

数组和指针

数组和指针 数组初始化特殊的字符数组 指针的引入指针的定义和初始化指针操作指针和const限定符 C风格字符串 C提供了两种类似于vector和迭代器的低级复合类型&#xff1a;数组和指针。与vector类似&#xff0c;数组也可以保存某种类型的一组对象&#xff0c;只是数组一经创建就…...

【数电尾灯设计】2022-8-16

缘由数电尾灯设计问题&#xff0c;求解答--CSDN问答 从题目可以列出 000 100 010 111-----------4进制 000 100 010 110 001 101 011 111-----------8进制 由列出可知用16进制芯片的3个引脚可以获得8进制推导出4进制从而可用逻辑处理为4进制实现尾灯功能。之上第一步实现了尾灯…...

F.interpolate函数

F.interpolate 是 PyTorch 中用于对张量&#xff08;通常是图像数据&#xff09;进行插值操作的函数&#xff0c;常用于调整张量的大小&#xff0c;例如改变图像的分辨率。它支持多种插值方法&#xff0c;包括最近邻插值、双线性插值和三次插值等。 语法 torch.nn.functional…...

Tableau数据可视化与仪表盘搭建-基础图表制作

目录 对比分析&#xff1a;比大小 柱状图 条形图 数据钻取 筛选器 热力图 气泡图 变化分析&#xff1a;看趋势 折线图 预测 面积图 关系分布&#xff1a;看位置 散点图 直方图 地图 构成分析&#xff1a;看占比 饼图 树地图 堆积图 对比分析&#xff1a;比大…...

Sentinel-5P遥感数据下载及预处理教程【20250105】

Sentinel-5P是欧空局&#xff08;Europe Space Agency&#xff0c;ESA&#xff09;于2017年10月13日发射的一颗全球大气污染监测卫星。卫星搭载了对流层观测仪&#xff08;Tropospheric Monitoring Instrument&#xff0c;TROPOMI&#xff09;&#xff0c;可以有效的观测全球各…...

快速学习 pytest 基础知识

全篇大概 5000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间10min 简介 Pytest是一个非常成熟的测试框架&#xff0c;适用于但愿测试、UI测试、接口测试。 简单灵活、上手快支持参数化具有多个第三方插件可以直接使用 assert 进行断言 一、Pytest安装 pip inst…...

[python]解决AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘问题

环境&#xff1a;python3.13.1 问题&#xff1a; 利用ddddocr进行验证码识别时报AttributeError: module PIL.Image has no attribute ANTIALIAS错误信息&#xff0c;具体如下&#xff1a; python3 Python 3.13.1 (main, Jan 6 2025, 22:29:09) [Clang 16.0.0 (clang-1600.…...

【C++】类和对象(下):友元、static成员、内部类、explicit 和 匿名对象

文章目录 前言一、友元二、static成员三、内部类四、隐式类型转换&#xff08;加explicit可以阻止隐式类型转换&#xff09;五、匿名对象 前言 一、友元&#xff08;友元函数 和 友元类&#xff09; 二、static成员&#xff08;类中被static修饰的成员变量 和 成员函数&#xf…...

Shapelet-aeon-1

本文中&#xff0c;我们将首创一个长度为m、维度为d的时间序列表示为一个向量。 在aeon中&#xff0c;我们将一个序列描述为x:(n_channels, n_timepoints). x是一个二维数组&#xff0c;其中n_channels对应的是维度d&#xff0c;或者说是特征数量&#xff1b;n_timepoints对应…...

2. 进程和线程

文章目录 前言1. 进程是什么2. 进程的相关属性3. 线程是什么4. 为什么引入线程5. 进程和线程的区别 前言 上一篇博客&#xff0c;我们讲到了CPU和操作系统&#xff0c;今天我们讲一个操作系统中一个非常重要的概念—线程和进程 1. 进程是什么 每个应用程序运行于现代操作系统…...

CE中注册的符号地址如何通过编程获取

我的方式是先执行lua申请共享内存&#xff0c;内存名称是进程id&#xff0c;这样多开也不受影响&#xff0c;然后通过共享内存的名字就可以读到地址了。之后的人造指针的地址也都可以放这里集中管理。 -- 申请内存 local size 1024 -- 申请 1024 字节&#xff08;1 KB&#…...

QT上实现SVM进行数据分类

针对不了解SVM的原理的同学强推下面这个课程&#xff1a; 6.机器学习课程&#xff08;六&#xff09;支持向量机&#xff08;线性模型&#xff09;问题_哔哩哔哩_bilibili 一、QT实现SVM的方法 1.调用SVM的C语言库&#xff1a;麻烦&#xff0c;要专门去找库&#xff0c;cmak…...

【unity调用c++动态库,c++和c#相互调用】

文章目录 前言一、编写C++动态库(MyLibrary.cpp)二、 编译C++动态库三、编写C#代码(CallbackExample.cs)四、将C++动态库与Unity项目集成五、Unity运行结果六、注意事项总结前言 在Unity中调用C++动态库并进行回调到C#的功能实现,涉及到C++与C#之间的交互。这个过程的关键…...

SAP FICO财务模块的会计年度变式是什么?有特殊的年度期间(财年)吗?可以不按日历月份来设定会计期间吗?

文章目录 一、会计准则中关于会计期间的一般性原则二、SAP系统中关于会计期间的设定&#xff08;1&#xff09;一般性的期间设定方式&#xff08;2&#xff09;特殊期间是什么&#xff1f;&#xff08;3&#xff09;有些国家与众不同的财年 三、可以不按日历月份来设定会计期间…...

Linux(17)——使用 DNF 安装和更新软件包

目录 一、使用 DNF 管理软件包&#xff1a; 1、 DNF 查找软件&#xff1a; 2、DNF 安装软件&#xff1a; 3、DNF 删除软件&#xff1a; 二、使用 DNF 管理软件包组&#xff1a; 1、DNF 显示组信息&#xff1a; 2、DNF 安装组&#xff1a; 三、使用 DNF 查看事务历史记录…...

vue中的设计模式

vue中使用了哪些设计模式 1. 观察者模式&#xff08;Observer Pattern&#xff09; 应用场景&#xff1a;Vue 的响应式系统核心就是观察者模式。 实现方式&#xff1a;通过 Object.defineProperty 或 Proxy 监听数据变化&#xff0c;当数据发生变化时&#xff0c;通知依赖的视…...

大模型性能随笔

1. 如果开了accumulate gradient更新&#xff0c;则pipeline并行的bubble会变小很多。因为每foward好多个batch&#xff0c;才开始backward。 2. chat聊天任务上&#xff0c;可以把prefix KV cache reuse功能利用起来&#xff1b;然后把同一个session的对话&#xff0c;路由到…...

pdf预览 报:Failed to load module script

pdf 预览报&#xff1a; Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “application/octet-stream”. Strict MIME type checking is enforced for module scripts per HTML spec. 报错原因&#xff1a…...

基于 gitlab-runner 实现调度GPU的资源

本篇目录 1. 客户需求2. 需求调研3. 实践3.1 方案一&#xff1a;环境变量的方式3.2 方案二&#xff1a;k8s 自身的spec注入机制 4. 效果 该实践来自于客户的一个真实需求 1. 客户需求 客户的某些流水线需要使用GPU资源&#xff0c;但是对于GPU服务器而言&#xff0c;会有多张G…...

【源码+文档+调试讲解】项目申报小程序

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代…...

【ShuQiHere】使用 SCP 进行安全文件传输

【ShuQiHere】&#x1f680; 在日常的开发和运维工作中&#xff0c;文件传输是一个常见的任务。scp&#xff08;Secure Copy&#xff09;是一个基于 SSH 协议的文件传输工具&#xff0c;能够在本地和远程主机之间安全地复制文件和目录。本文将详细介绍 scp 的使用方法&#xf…...

算法基础 - 二分查找

文章目录 二分查找算法通常应用于已排序的数组。以下是一个C实现的二分查找算法示例&#xff1a; #include <iostream> #include <vector>int binarySearch(const std::vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while …...

权限掩码umask

1 、 设置新建文件或目录的默认权限 在 Linux 系统中&#xff0c;当用户创建一个新的文件或目录时&#xff0c;系统都会为新建的文件或目录分配默认的权限&#xff0c;该默认权限与umask 值有关&#xff0c;其具体关系是&#xff1a; 新建文件的默认权限 0666-umask 值 新建…...

5. CSS引入方式

5.1 CSS的三种样式 按照 CSS 样式书写的位置(或者引入的方式)&#xff0c;CSS样式表可以分为三大类&#xff1a; 1.行内样式表&#xff08;行内式&#xff09; 2.内部样式表&#xff08;嵌入式&#xff09; 3. 外部样式表&#xff08;链接式&#xff09; 5.2 内部样式表 …...

在Linux中,SElinux的作用是什么?如何临时和永久的更改SElinux上下文?

SELinux在Linux系统中扮演者至关重要的安全角色&#xff0c;它通过实施强制访问控制&#xff08;Mandatory Access Control,MAC&#xff09;策略来增强系统的安全性。不同于传统的用户和组权限管理机制&#xff08;即自主访问控制DAC&#xff09;&#xff0c;selinux提供了一种…...