自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 matlab绘制局部放大图

直接点几下鼠标就能得到一个局部放大图

2023-04-20 23:12:53 9357 4

原创 matlab绘制折线图基本操作

最后进行一个总结,绘制折线图,我们需要设置线型、标记、线条颜色,还需要设置线宽、标记大小、标记边缘颜色、标记面部颜色,还需要设置轴标签、标题、图例和字体,如果需要绘制多个图,需要使用hold on,这样后绘制的图就不会覆盖前面的图。

2023-04-20 15:49:21 19662 1

原创 粒子群算法优化策略总结

非线性递减惯性权重,前期w取值较大,具有较强的全局搜索能力,后期w取值较小,具有较强的局部搜索能力,而非线性递增惯性权重则与之相反,前期w取值较小,具有较强的局部搜索能力,后期w取值较大,具有较强的全局搜索能力。混沌Sine映射作为一种经典的混沌映射,具有良好的遍历性等优点,增加了算法的随机性,使算法在前期拥有较强的局部寻优能力的同时,在后期也拥有不错的全局寻优能力。通过混沌sine映射产生(0,1)的随机数,使得w增长的更慢,使得其前期具有更强的局部开发能力

2023-03-19 14:19:30 5748

原创 群智能优化计算中的混沌映射

经实验证明,采用混沌映射产生随机数的适应度函数值有明显提高,用混沌映射取代常规的均匀分布的随机数发生器可以得到更好的结果,特别是搜索空间中有许多局部解时,更容易搜索到全局最优解,利用混沌序列进行种群初始化、选择、交叉和变异等操作会影响算法的整个过程,而且常常能取得比伪随机数更好的效果。

2023-03-09 21:51:29 6675 13

原创 粒子群算法

当目标函数比较复杂时,普通的粒子群算法容易陷入局部最优,而且后期的收敛速度较慢,这会导致整个算法的效率和精度下降。影响粒子群算法的效率和精度的参数主要有惯性权重w、个体认知因子c1、群体认知因子c2。当w较大时,算法有着更好的全局搜索能力,当w较小时,算法有着更好的局部寻优能力;当c1较小、c2较大时,算法有着更好的局部寻优能力。恰当地选取算法的参数值可以改善算法的性能。

2023-03-06 16:57:56 13932

原创 static关键字的作用

函数也是具有外部连接属性的,编译器每次编译只处理一个编译单元,当某个编译单元需要使用其他编译单元中的函数,只需要声明该函数(或者包含该函数声明所在的头文件)然后就可以使用,当一个函数被static所修饰的时候,这个函数的外部连接属性就变成了内部连接属性,也就成为了静态函数,使得这个静态函数只能在自己所在的编译单元中被使用,而不能被其它编译单元所使用,否则会出现链接性错误。

2023-01-14 08:13:42 8812

原创 C语言rand()函数产生随机数详解

在调用rand函数之前,会先查询是否主动调用过srand(seed)来为伪随机数生成器设定种子,如果有,那么就按照我们的代码设定种子,即初始化seed的起始值,若没有调用srand(seed),那么系统会自动给seed赋初始值,即自动调用srand(1)一次,也就是将seed的值设置为1。如果每次调用rand函数时,种子相同,那么根据公式产生的伪随机数将是相同的。

2022-09-28 21:13:01 36520 14

原创 VS2019实用调试技巧

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,编译器对我们写的代码进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用,Release版本不能调试。

2022-05-19 17:45:13 7291

原创 C/C++清理输入缓冲区中的内容

1.清理输入缓冲区最后剩下的单个回车符:方法一:用getchar函数读取回车符,方法二:用scanf("%*c")读取掉回车符,方法三:用scanf(" %c",&ch)。 2.清理输入缓冲区中剩下的所有内容:方法一:用getchar函数结合循环语句,方法二:用scanf("%*[^\n]"):

2022-05-14 11:21:12 9694 2

原创 scanf语句的使用和执行原理

这说明scanf语句读取完数字后,会把后面的空格也读取掉。如果后面有变量来接收,读取后就会把空格赋值给对应的变量,如果没有变量来接收,那么仅仅是读取,不会进行赋值操作。值得注意的是,scanf只有在读取完数字后会继续把后面的空格读取掉

2022-02-07 11:10:31 13113 1

原创 SpringMVC工作原理

HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器,然后HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView 对象(包含模型数据、逻辑视图名)

2024-07-23 10:31:51 416

原创 反射快速入门

反射就是通过字节码文件获取类的成员变量、构造方法和成员方法的所有信息。利用反射,我们可以获取成员变量的修饰符、名字、类型、取值。我们可以获取构造方法的名字、形参,并利用通过反射获取的构造方法创建对象。我们可以获取成员方法的修饰符、名字、形参、返回值、抛出的异常、注解,并运行通过反射获取的方法。

2024-07-03 17:31:55 266

原创 RxJava快速入门

Rxlava是基于观察者模式实现的,分别有观察者和被观察者两个角色,被观察者会实时传输数据流,观察者可以观测到这些数据流。基于传输和观察的过程,用户可以通过一些操作方法对数据进行转换或其他处理。在RxJava中,观察者就是Observer,被观察者是Observable和Flowable。

2024-06-29 16:34:22 349

原创 npm安装依赖过慢

今天在使用npm安装taro框架的依赖时,速度慢到吐血,使用了淘宝镜像源依然很慢,安装一个多小时没反应,最后清理了缓存再次安装速度就快很多了,因此解决方法大致有两种:

2024-06-07 16:11:31 636

原创 启动SpringBoot测试方法的时候报错:java.lang.NullPointerException

解决方法:(1)必须在SampleTest方法上添加@RunWith注解,来指定其测试环境(2)使用JUnit5的@Test注解,即junit.jupiter.api中的@Test注解

2024-05-30 16:44:27 302

原创 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name

这个jar包是 mybatis开发团队为Spring Boot 提供了 MyBatis的整合的jar包,等于这个包是为了解决springboot整合mybatis用的,帮你做很多自动化的工作,当你配了这个以后,你再引入的mybatis-plus实际上是不会生效的。

2024-05-30 16:18:05 270

原创 org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource‘

今天启动一个测试类的时候 idea报错:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource',原因是yml文件中数据库配置有问题,改正后正确通过测试

2024-05-30 16:05:25 127

原创 String s = “hello“和String s = new String(“hello“)的区别

这涉及字符串加载到字符串常量池的原理:由于字符串字面量先在编译阶段加载到class常量池中,然后在类加载阶段从类常量池中加载到运行时常量池中,当字符串字面量被调用的时候,会检查字符串常量池中是否包含该字符串对象,如果已经包含,则直接返回该字符串对象的引用,如果没有,则创建该字符串字面量对应的对象。

2024-05-11 16:20:56 320

原创 深入剖析JVM常量池(类常量池、运行时常量池、字符串常量池)

字符串常量池专门用于存储字符串常量。对于 Hotspot 虚拟机来说,类加载时,字符串字面量作为类常量池的一部分信息被载入运行时常量池中,它们以特殊的形式存储在运行时常量池中,此时它们并未被实例化为Java堆中的String对象。只有当这个字符串字面量被调用时,才会对其进行解析,即检查字符串常量池中是否已经存在相同内容的字符串对象。如果存在,就直接返回指向该对象的引用,如果不存在,虚拟机会在字符串常量池中创建一个对应的String实例,并返回这个新实例的引用。

2024-05-11 15:07:54 1503

原创 为什么反射慢?

对于基本数据类型的参数,它们必须被装箱成对应的包装类(如Integer、Double等),以便它们可以作为对象被传递。在方法实际执行时,如果方法的参数是基本类型,JVM需要基本类型的值,而不是它们的包装类对象。因此,JVM会自动进行拆箱。例如,如果你通过反射调用的方法期望得到一个int类型的参数,但你传入的是Integer,在调用过程中JVM会自动将Integer对象拆箱为int类型。装箱和拆箱操作涉及到额外的对象创建(装箱时)和对象值的提取(拆箱时),在高性能要求的场景下,过度的装箱和拆箱可能会导致性能瓶

2024-05-10 14:40:41 434

原创 为什么说反射是一种在运行时动态解析类信息的机制

普通的方法调用是在编译时确定的,这意味着编译器在编译代码时就知道要调用的方法是什么。但是,当涉及到反射时,情况就不同了,当我们使用反射来调用方法时,编译器无法在编译时确定要调用的方法,而是在运行时执行代码之后才能确定。

2024-05-10 10:32:23 342

原创 Q_DECL_IMPORT和Q_DECL_EXPORT的作用

在类或函数的声明中使用 Q_DECL_IMPORT,这个宏告诉编译器该类或函数是在另一个动态链接库中定义的,因此该类或函数是从外部库导入的,编译器应该生成适当的代码来处理导入。通常在头文件中的类和函数声明中使用,以便在使用该类或函数的代码中正确处理导入。

2024-01-18 11:02:07 1515

原创 VS+QT编译环境中字符乱码问题详解

原因在于这些中文字符串被GBK编码为源字符集,编译器会先采用GBK将这被GBK编码的源字符集解码,再用GB2312编码为执行字符集,而Qt5内部采用Unicode字符集,UTF-16编码,QT中的函数会将执行字符集使用UTF-8解码,再使用UTF-16编码为unicode字符集,QString内部使用UTF-8对执行字符集进行解码的时候,与执行字符集编码格式不一致,肯定会出现乱码现象。

2024-01-17 19:59:19 1958

原创 PCB电路板Bmp图像处理

解析PCB电路板的gerber文件,将PCB电路板图像显示并绘制出PCB电路板BMP图像用于喷墨打印,针对打印需求,需要输出1bit图像、2bit图像、1bit&2bit反色图、8bit墨量直观图、预览图和xml文件,同时,为控制喷头喷印的墨量,需要对图像进行处理,比如2bit灰度变化、抽点、削减线宽,为防止喷墨后有墨流出,需要对色块的边缘进行一圈筑坝。解析和显示部分由同事完成,本人主要完成PCB电路板BMP图像处理部分,即上述黑体字所描述的功能。

2024-01-14 15:59:25 1132

原创 利用Qt输出XML文件

xmlWriter.setAutoFormatting(true);//这一行设置xmlWriter为自动格式化模式,这意味着生成的 XML 文件将以更易读的格式排列,包括缩进和换行

2024-01-12 16:50:19 660

原创 C语言实现bmp图像底层数据读写与创建

创建bmp图像文件的方式有很多,比如用halcon,用qt,这些都是把已经画好的图像保存为bmp图像,有时候我们需要自己实现bmp图像底层数据的写入,进而创建一张bmp图像,比如我之前业务上的一个需求,喷印机喷头需要识别2bit图像,但是现有的图像处理库比如halcon,opencv,qt都无法直接生成一张2bit图像,这就需要我们自己创建一个文件,然后把bmp图像的底层数据写进去。

2024-01-12 09:56:26 592

原创 bmp图像文件格式超详解

位图数据(bitmap data):图像的像素值可以是RGB值,也可以是调色板的索引值。如果使用了调色板,那像素值就是调色板的索引值,可以根据像素值得到调色板索引值,然后根据调色板索引值找到相应的颜色,该颜色即为像素的颜色,如果用RGB值表示位图数据,那位图就没有调色板。通常8位深及8位深以下的图像会用到调色板,8位深以上的就不用调色板了,因为8位深以上的图像再使用调色板内存开销就会很大,直接使用RGB值存储,更节省内存。 以16位深图像为例,共有2^16=65536种颜色,如果使用调色板,调色板的大小就是

2024-01-11 17:59:17 4537

原创 bmp图像大小计算方式

首先计算图像每行字节数,直接95 * 1/8肯定是不行的,因为这没有考虑内存对齐。由于Windows在进行行扫描的时候最小的单位为4个字节,所以我们以4字节为单位计算图像的每行字节数,即width * bitCount/32,95 * 1/32 = 2(DWORD),这样算出来的结果就是以4字节为单位,windows进行行扫描的时候就不会出现扫描不到一整个4字节的情况,然而这样还是有问题的,它是一种向下取整,会损失像素信息,95 * 1%32=31,这31比特,不到4字节的信息就没被存储。所以我们要向上取整

2024-01-10 20:54:56 834

原创 Qt中使用微分法绘制圆弧

微分法的原理是将圆弧拆分成若干个小段,绘制一个个微分后的极小的直线来完成圆弧的绘制

2024-01-07 16:28:42 514

原创 计算圆弧的起始角度、终止角度和矩形信息并使用drawArc绘制圆弧

正值的角度表示逆时针方向,而负值的角度表示顺时针方向。因此,如果你指定正值的 startAngle 和 spanAngle,那么绘制的弧形将是逆时针方向的;如果是负值,那么绘制的弧形将是顺时针方向的。0度位于时钟的 3 点钟位置。这意味着,如果 startAngle 为零,弧形的起始点将位于圆的最右侧,然后按照逆时针方向绘制。

2024-01-06 22:03:55 840

原创 delete释放内存时卡在命令行窗口

如果指针指向的内存不是通过 new 关键字动态分配的,而是通过栈或全局/局部静态内存分配的,那么调用 delete[] 会导致未定义行为。确保在分配内存时,不要在后续的使用中越界访问该内存。越界访问可能破坏内存管理数据,导致未定义行为。最终调试发现,我的错误属于第四种,我在后续的代码中对ptr指向的动态内存越界访问了。如果 eTwoLineData 在被删除后再次被访问,就会发生未定义行为。如果同一个指针被删除了两次,这会导致未定义行为。

2023-10-19 14:34:46 187

原创 读取位置时发生内存访问冲突

访问位置冲突异常通常是由以下几种原因引起的:

2023-10-14 15:43:20 2749

原创 C6385:从“imageData”中读取的数据无效: 可读大小为“int __cdecl qCeil(double)(pixelWidth*pixelHeight)*1”个字节,但可能读取了“2”个

当使用unsigned char c = imageData[i]这种方式访问数组时,编译器默认根据对齐规则进行内存访问操作。对齐是指将变量存储在内存中的地址按照特定规则对齐的过程。当你使用unsigned char c = imageData[i]这种方式进行访问时,实际上编译器会认为你要读取imageData[i]这个字节,然后进行对齐操作,将它与下一个字节作为一个整体处理。这可能是因为读取一个单独的字节会导致未对齐的访问,可能会降低性能或导致硬件异常。因此,当你尝试读取一个字节时,编译器会默认读取

2023-09-14 09:43:14 520

原创 GetProcAddress无法获取动态库中函数的地址

原因在于GetProcAddress(hDll,"add")这个函数的第二个参数,第二个参数表示要调用的函数地址,add函数作为动态库dll2中的一个函数,在经过编译器编译后,采用_cdecl调用约定对应的函数名修饰规则对add函数名进行了修饰,修饰过后add的函数名变为?add@@YAHHH@Z,所以只需把第二个参数改为?add@@YAHHH@Z即可运行成功。

2023-06-09 10:40:24 809

转载 C/C++函数调用约定和函数名称修饰规则

对于C++的类成员函数(其调用方式是thiscall),函数的名字修饰与非成员的C++函数稍有不同,首先就是在函数名字和参数表之间插入以“@”字符引导的类名;其次是参数表的开始标识不同,公有(public)成员函数的标识是“@@QAE”,保护(protected)成员函数的标识是“@@IAE”,私有(private)成员函数的标识是“@@AAE”,如果函数声明使用了const关键字,则相应的标识应分别为“@@QBE”,“@@IBE”和“@@ABE”。如果参数类型是类实例的引用,则使用“AAV1”,对于con

2023-06-09 10:08:31 473

原创 如何用VS2019创建并调用动态库

网上查了相关资料,创建动态库主要有两种方式,一种是通过空项目创建动态库,一种是直接创建动态链接库,本文所总结的就是第二种,直接创建动态链接库。

2023-06-01 17:02:33 2944

原创 报错:dll不是有效的win32应用程序

原因在于Dll3动态库是默认的启动项目,我们需要修改应用程序text3为启动项目:右键text3->选择“设为启动项目”->问题解决

2023-06-01 11:54:21 2043

原创 静态库与动态库的区别

一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件,如果你工程里只有一个lib.h和lib.cpp,那么编译后产生的lib文件实际上就是这一个lib.obj文件的一个集合,但是如果你工程里还有其他的很多个lib.cpp文件,那么就会在编译之后生成许多lib.obj文件,然后最终只链接生成一个静态lib文件,这就是静态库。也正是因为静态库中包含了所有的静态库的.obj文件,所以静态库包含了函数的完整实现。

2023-05-31 14:45:42 1212

原创 error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “pch.h“

大部分人好像用这两种解决方案就能好,我就一直不行还是报错,最后采取了如下解决方案解决了报错,如果你采取上述两种方式仍然无法解决报错,可以尝试下这种方法:

2023-05-30 16:58:26 6297

原创 matlab绘图配色

利用一位大神的配色脚本函数可以轻松选择自己所需要的颜色,而无需通过RGB三元组进行调节,该脚本函数共提供了270种颜色选择

2023-04-20 17:22:53 969 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除