- 博客(26)
- 收藏
- 关注
原创 Android GameActivity(NativeActivity)读写文件
最近研究native android相关内容,其中最棘手的就是文件读写问题,最主要的是相关的文档很少。这里写下我所知道的方法。由于本人使用的是Android14[arm64-v8a]版本的设备,能访问的路径相当有限,如果想要访问更多的路径,就不得不申请权限了。
2025-01-01 03:25:06
422
原创 Visual Studio 2022+CMake配置PCL1.14.1(新增QT教程)
本教程只是提供高效的PCL配置流程,不提供Qt环境配置,如果需要GUI界面,则需要自寻查找Cmake配置QT的教程。请相信,在CMake之下没有任何事是困难的,最困难的工作已经由前辈们完成。因此,对于C++用户来说学习CMake是极其重要的。
2024-12-13 23:50:08
1180
原创 笔记:visual studio2022编译 和 运行 VTK9.4.0
最后,在系统环境变量中,添加新的变量VTK_DIR,值就是lib目录下的cmake\vtk-9.4。对于一个简单示例来说,添加下列红框中的代码即可,除了VTK_DIR的路径和add_executable的值需要根据自己的实际情况改变,其他部分直接复制即可。如下图,编译VTK时,可以从配置管理里,更改动态库的类型Debug还是Release,修改变量(例如,动态库安装路径)。安装完成后,可以在日志里看到安装的路径,打开该路径即可看到VTK动态库,如下。配置完成后,就可以添加vtk的头文件和写代码了。
2024-12-01 00:36:18
1280
5
原创 VTK平面多边形的绘制(包括环形)
按照下图,将点序0132,2354,4576,6710存入,就能得到圆环。当然了,为了接近于圆形,需要更多的点。我们将代码稍加修改,使得代码能输出三角环,四角环,N环,乃至圆环,也就是vtkDiskSource的基本原理了。代码如下,numCells为胞元的数量,顶点数量为胞元的两倍。vtkPoints可以视为多边形的顶点,而vtkCellArray存储vtkPoints的id(索引),同时也决定着细分多边形的胞元形状。需要注意的是,如果按照0123,4567的存储方式只能得到矩形,而非中空的效果。
2024-09-09 18:02:21
795
原创 Emitter-基于C++的信号槽
Emitter 类似QT信号槽,可以绑定函数到Command信号上,通过Emit对应的Command,触发函数回调。为了传递任意参数,定义了Params类;由于没有考虑线程安全和效率,使用时需要多注意。
2024-08-31 18:06:24
452
原创 QT Creator从源码编译(MinGW64)和使用VTK 9.3.0
非常详细的QT Creator从源码编译和使用VTK 9.3.0,仅限MinGW64.
2024-06-05 22:25:17
1963
14
原创 QT读取和转存xlsx文件
通过上述分析,我们需要解析的文件只有workbook.xml和sheet.xml。分别是WorkBook和SheetMapper,此外,我们还需一个类(XlsxHandler)来完成解压文件,并执行文件操作。workbook保存sheet名的映射关系,sheets则保存每个Sheet的值。其中,workbook.xml保存了xlsx的sheet外部和内部名称的映射关系。sheet.xml则保存着对应Sheet的数据。通过将二者对应,便于程序通过xlsx视图中的文件名到压缩包中寻找对应sheet.xml。
2024-05-16 14:20:44
770
原创 单例导致 RTTI symbol not found for class ‘QObject‘
使用QQmlEngine::setObjectOwnership(&instance, QQmlEngine::CppOwnership)将所有权保留给c++即可。Qt Quick使用qmlRegisterSingletonType注册单例,使用Qt.quit等退出程序时,出现崩溃。调试会输出 RTTI symbol not found for class 'QObject'
2024-04-10 16:59:42
708
原创 c++ Socket(windows) 笔记
在服务器上接收和发送数据send()/recv()在客户端上发送和接收数据send()/recv()断开客户端的连接closesocket()断开服务器连接closesocket()为客户端创建套接字 socket()为服务器创建套接字socket()连接到套接字 connect ()侦听套接字listen()接受连接accept()绑定套接字bind()
2023-10-07 14:44:15
167
原创 二叉树的四种遍历方式(递归or非递归/C++)
二叉树的遍历可以分为先序、中序、后序和按层遍历。前三者可以用递归的方式实现,也可以借助栈非递归地遍历。按曾遍历则是借助队列来实现。递归版非常简单,这里只介绍非递归版,该方式均在循环中完成。先序遍历:如果当前节点不为空,输出当前节点的值。如果其左节点不为空,则将当前节点入栈,再移动到其左节点;如果左节点为空,从栈中取出一个节点作为当前节点(栈空则结束循环),再移动到其右节点。中序遍历:当前节点的左节点非空,则当前节点入栈,否则输出当前节点的值(左节点为空,当前节点就是中间节点。
2023-09-09 16:42:49
290
原创 递归最小边界矩形算法
定义一个空的边列表edgeList,遍历mbrList,取出每个MBR,对每个MBR的四条边进行多边形的拓扑运算,将得到的边存入edgeList。如果点云满足最小建筑物(长和宽不要过小)的条件,计算每个点云的MBR,以及点云端点在curMBR上的投影点,用投影方向校正算法计算得到正确的MBR。将点云放入epList,把修正后的MBR存入mbrList,把返回的索引存入索引队列。根据阈值,计算点云与curMBR的重叠点和非重叠点,将点云划分为多个次级点云,用一个新的端点列表childList存放。
2023-07-26 18:21:52
955
原创 迷宫寻路-Easyx演示
从入口开始,检测当前位置的四个方向是否存在可行的位置P,将P放入队列中,将当前位置存储的距离加1后,替换位置P的值。接着从队列中取出下一位置。重复同样的操作,直到下一个位置是出口即可停止。它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。寻找最短路径则比较简单,经过的位置都存储了距离入口的距离,从出口的距离逆向寻找。最短路径可能不止一条。
2023-07-05 17:54:57
323
原创 PCL可视化刷新等问题(VS+QT)
setBackgroundColor接收的参数范围为0.0~1.0,如果是0~255需要做转换。使用该方法后无法用2的办法更该颜色,做法是在更在的地方移除点云重新重新添加。以上是个人使用的一些知识总结,希望能帮助各位同学,如有错误,还望指正。两种方式都能更新点云窗口,但是实际用下来,第二种效果会更好。针对PCL刷新问题,我用过两种方式。这里我们需要 头文件。
2023-05-02 00:59:30
1215
原创 使用vector的误区.size()
上面代码是为了计算一个点集相邻两点的距离。这段代码在数组points不为空时能正常工作,然而当数组为空时,代码将会崩溃。我长期以为程序会因为i=0,points.size()-1=-1,i<points.size()-1为false,而终止下去;然而事实出乎我的意料,记录一下自己踩坑。因此,如果在使用size()-1时,没有通过索引访问数组,程序将循环很多次;反之,程序会因为访问了范围外的值而崩溃;因为size()函数返回的是无符号整数,当数组为空(即points.size()=0)这时候再减1将会溢出。
2023-04-21 18:47:09
198
原创 点云delaunay三角化PCL and C++
算法改编自一个JS程序。好像是github上的项目,但是时间比较长,不记得是哪个了。最终结果和源程序基本一样。因为是出于兴趣写的,没有很严谨,无法保证算法的百分百正确。本文使用了PCL点云库来作可视化。感兴趣的可以将源码进行规范和优化。
2023-04-14 17:01:44
573
原创 基于PCL和C++实现偏度平衡滤波(SKF)算法
原文:偏度平衡滤波SKF (Skewness balancing filtering)算法假定Lidar点云中自然地面点的高程概率密度分布服从正态分布,非地面点会使得Lidar点云中点的高程概率密度分布偏离正态分布,呈现出偏态分布,偏度表示偏离正态分布的程度。每次校正,高程最高的点被标记为非地面点剔除,迭代进行,直至偏度约等于0,剩余的点即为地面点。程序结束时,in_cloud为地面点云结果,out_cloud为(非地面点云)建筑物点云结果。实现算法得到效果如下,第一图是原始点云,图二是分离的建筑物点云。
2022-11-25 22:22:40
882
1
原创 PCL建筑物点云最小外接矩形实现C++
参考https://blog.youkuaiyun.com/Fan_z_0802/article/details/80960790原理很简单,先计算出目标的中心,将目标绕中心旋转一定角度alpha。求出点云的最值Xmax,Xmin,Ymax,Ymin。这四个值两两组合就能组成外接矩形的四个顶点。记录矩形面积最小时的最值和角度。以上步骤得到的矩形的边分别平行于X轴和Y轴,通过对矩形的四个点逆旋转alpha。就能得到任意角度的外接矩形。我们选择旋转目标,而不是外接矩形,这样会更容易理解。 具体实现
2022-11-17 20:47:24
2677
20
原创 如何在VS2022(QT)或QTCreator上配置并显示PCL点云文件
PCL下载地址:https://github.com/PointCloudLibrary/pcl/releases下载这两个文件。选择第三个,如果安装失败就选第一个,没什么影响。勾选CreatePCL Desktop Tcon。安装目录自己选择即可。安装PCL和3rd。 安装完成,在安装目录下找到3rdParty\OpenNI2目录下的OpenNI-Windows-x64-2.2.msi,安装该程序,安装目录自己选择。解压pcl-1.12.1-pdb-msvc2019-win64.zip,将解压得到的文件
2022-11-04 19:57:35
9018
39
原创 C++棋盘覆盖
下边是一个4X4的棋盘,红色为特殊棋盘。要使用分治算法,据需要把四个区(0,1,2,3)转化为含有特殊棋盘的区域。以棋盘中心为中点,将四周的四个棋盘覆盖,如果该区域和红色目标棋盘在同一个区域,将其去掉(因为已经有红色区域了)。考虑四个特殊棋盘中存在的原始特殊棋盘(dr,dc),在哪个区就将int dr, int dc所代表的坐标替换为。如果不考虑特殊期盼的位置,即划分的四个特殊棋盘在四个中心,可以用以下代码分别处理四个区。指的是特殊棋盘在区域3,该区域的特殊棋盘坐标就为(dr,dc)。
2022-09-09 22:31:10
1807
原创 利用C++库的优先队列实现哈夫曼编码
#include<iostream>#include<fstream>#include<string>#include<vector>#include<queue>#include <functional>#include<chrono>using namespace std;using namespace chrono;struct binaChar { char value; int .
2021-11-20 19:12:19
513
原创 C++迷宫生成和BFS/DFS寻路
#include <iostream>#include<graphics.h>#include<vector>#include<stack>#include<queue>using namespace std;#define W 801#define S 801#define X 1struct point { int x, y;};void initMap(vector<vector<int>&g.
2021-10-30 19:28:28
236
原创 哈夫曼编码及文件操作
#include<iostream>#include<string>#include<vector>#include<fstream>using namespace std;//定义字符以及权值struct binaChar{ char value; int width;};//定义储存哈夫曼树节点struct node { char value; int width; struct node* rc.
2021-10-22 01:22:17
606
原创 c#实现鼠标长按和单击混用Unity 2D
private bool continueMouse=false;声明布尔变量用于是否处于长按状态 //以下代码放于Update(),FixedUpdate()重复调用的函数中if (Input.GetMouseButtonUp(0)) continueMouse = false; if (Input.GetMouseButtonDown(0)) continueMouse = true; if (co...
2021-07-22 01:50:00
437
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人