c++
文章平均质量分 74
perry0528
这个作者很懒,什么都没留下…
展开
-
动态查找树 || B-树的c++实现
B-树是一棵平衡的多路查找树,它在文件系统中很有用。一棵m阶的B-树或为空树或为满足以下特性的m叉树:树中的每个结点至多有m棵子树。若根结点不是叶子结点,则至少有两颗子树。除根结点外的所有非终端结点至少有Ceiling(m/2)(向上取整)棵子树所有的非终端结点中包含下列信息数据:(n, A0, K1, A1, K2, A2, … , Kn, An)n表示有n个结点...原创 2019-03-26 13:04:32 · 466 阅读 · 0 评论 -
动态查找树 || 平衡二叉树的c++实现
在满足二叉查找树的特性上,还要满足左右子树深度之差绝对值不大于1。构造方法:插入过程中,采用平衡旋转技术获得。原创 2019-03-22 12:58:31 · 336 阅读 · 0 评论 -
计算机图形学 || 画简单三角形并利用ImGUI改变三角形颜色
GUI and Draw simple graphics基础知识学习来源learnOpenGL重要概念顶点数组对象(VAO)顶点缓冲对象(VBO)索引缓冲对象(EBO)图形渲染管线3D坐标转为2D像素的处理过程是由OpenGL的图形渲染管线管理的,它分为两部分工作。第一部分把3D坐标转为适应屏幕的2D坐标。第二部分把2D坐标转变为实际有颜色的像素。顶点输入标准化设...原创 2019-03-13 16:38:34 · 3458 阅读 · 0 评论 -
动态查找表 || 二叉排序树的c++实现
二叉排序树的特性:若左子树不空,左子树上所有结点的值均小于它的根结点值。若右子树不空,右子树上所有结点的值均大于它的根结点值。左右子树分别为二叉排序树。删除算法:被删除的结点是叶子结点。被删除的结点只有左子树或有右子树。被删除的结点既有左子树又有右子树。对于第三种我们选择删除结点的左子树的最右结点。查找性能的分析:(平均查找长度)不同树的平均查找长度不同,即使是相同序...原创 2019-03-21 17:02:05 · 408 阅读 · 0 评论 -
数据结构 || 次优查找树的c++实现
参考严蔚敏老师的数据结构(c语言版),并用c++加以实现//// main.cpp// Search_Optimal//// Created by peiyu wang on 2019/3/19.// Copyright © 2019 peiyu wang. All rights reserved.//#include <iostream>#includ...原创 2019-03-19 23:18:05 · 262 阅读 · 0 评论 -
计算机图形学 || 坐标系统的认识并创建3D旋转小物体
坐标系统(coordinate system)局部空间(物体空间)局部空间是指物体所在的坐标空间,即对象最开始所在的地方。想象你在一个建模软件(比如说Blender,Blender中通过移动浮标来决定新建物体的局部坐标)中创建了一个立方体。你创建的立方体的原点有可能位于(0, 0, 0),即便它有可能最后在程序中处于完全不同的位置。甚至有可能你创建的所有模型都以(0, 0, 0)为初始位置(...原创 2019-03-15 16:55:58 · 577 阅读 · 0 评论 -
算法 || 快速排序的c++实现
快速排序的思想:设置两个左右哨兵,每次取最左边的数作为基准数,然后先移动右哨兵,找出第一个比基准数小的数;之后然后移动左哨兵,找到第一个比基准数大的数,此时交换两个哨兵指向的数,然后继续移动重复上述过程,直到两个哨兵重合,交换基准数与哨兵指向的数。再接着对基准数的左右两边分别重复上述过程(可用递归实现)。具体过程可参考博客:https://blog.csdn.net/adusts/articl...原创 2019-03-19 18:09:35 · 116 阅读 · 0 评论 -
计算机图形学 || OpenGL中的线性代数(矩阵的变换)
位移位移(Translation)是在原始向量的基础上加上另一个向量从而获得一个在不同位置的新向量的过程,从而在位移向量基础上移动了原始向量。和缩放矩阵一样,在4×4矩阵上有几个特别的位置用来执行特定的操作,对于位移来说它们是第四列最上面的3个值。如果我们把位移向量表示为(Tx,Ty,Tz),我们就能把位移矩阵定义为:[100Tx010Ty001Tz0001]⋅(xyz1)=(x+Txy+T...原创 2019-03-14 17:14:51 · 953 阅读 · 0 评论 -
算法 || c++实现各种经典内部排序
经典的排序算法如下:插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序鸡尾酒排序(双向冒泡)快速排序选择排序简单选择排序堆排序归并排序基数排序 / 桶排序代码实现://// main.cpp// sort//// Created by peiyu wang on 2019/3/28.// Copyright © 2019 ...原创 2019-03-29 18:28:09 · 190 阅读 · 0 评论 -
计算机图形学 || Bresenham算法画三角形边框以及圆形并用栅格化对其进行填充
Bresenham算法在进行直线的扫描转换时,由于不涉及浮点数运算,只是整数类型的运算,所以大大提高了计算速率。Basic:1. 使用Bresenham算法(只使用integer arithmetic)画一个三角形边框:input为三个2D点;output三条直线(要 求图元只能用 GL_POINTS ,不能使用其他,比如 GL_LINES 等)。Bresenham画直线的算法主要步骤是判断...原创 2019-03-27 13:40:08 · 4077 阅读 · 0 评论 -
计算机图形学 || 基础光照之冯氏光照模型
冯氏光照模型:Basic:1. Phong光照模型:组成分量:环境光照(Ambient Lighting)即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。// ambientfloat ambientStrength = 0.1;vec3 ambient ...原创 2019-05-12 16:58:40 · 1902 阅读 · 1 评论 -
计算机图形学 || Camera
Basic:1. 投影(Projection):把上次作业绘制的cube放置在(-1.5, 0.5, -1.5)位置,要求6个面颜色不一致。float vertices[] = { // 顶点位置 // 颜色坐标 -2.0f, -2.0f, -2.0f, 1.0f, 0.0f, 0.0f, 2.0f, -2.0f, -2...原创 2019-04-18 11:10:42 · 865 阅读 · 0 评论 -
查找 || 哈希表的c++实现
哈希表的构造方法:直接定址法数字分析法平方取中法折叠法除留余数法随机数法处理冲突的方法:开放地址法线性探测再散列二次探测再散列伪随机探测再散列再哈希法链地址法建立一个公共溢出区装填因子:平均查找长度ASL跟哈希表构造方法和处理冲突的方法都有关。一般情况下,处理冲突方法相同的哈希表,其平均查找长度依赖于哈希表的装填因子:α=表中填入的记录数哈希表的长度...原创 2019-03-28 17:17:49 · 1034 阅读 · 0 评论 -
外部排序 || c++实现多路归并的败者树算法
算法概念:如果我们要对大规模文件进行排序,不能一次装入内存中,只能从外存一次次读取分别排序,而外存的IO时间复杂度很高,所以我们应该尽量减少针对外存读写的次数。如果我们只是简单地进行二路归并的话,归并路数越少归并的次数就越多,每次归并都要进行一次IO操作。所以我们考虑尽量进行多路归并,而多路归并不同于简单地二次归并只需对两组数进行指针移动归并,为了降低多路归并中归并的时间复杂度。我们考虑使用...原创 2019-04-01 17:33:30 · 1691 阅读 · 1 评论 -
计算机图形学 || openGL中的camera
摄像机/观察空间摄像机位置摄像机位置简单来说就是世界空间中一个指向摄像机位置的向量。glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);摄像机方向这里指的是摄像机指向哪个方向。现在我们让摄像机指向场景原点:(0, 0, 0)。这里运用将两个矢量相减,就能得到这两个矢量的差,用场景原点向量减去摄像机位置向量的结果就是摄像机的指向向量。由于我...原创 2019-03-27 17:54:30 · 3119 阅读 · 0 评论 -
计算机图形学 || Translation
Basic:1. 画一个立方体(cube):边长为4, 中心位置为(0, 0, 0)。分别启动和关闭深度测试glEnable(GL_DEPTH_TEST) 、 glDisable(GL_DEPTH_TEST) ,查看区别,并分析原因。着色器:顶点着色器:#version 330 corelayout (location = 0) in vec3 aPos;//layout (loc...原创 2019-04-10 15:27:21 · 746 阅读 · 0 评论 -
动态查找树 || 键树的c++实现(双链树)
概念:键树又称为数字查找树,树中的每个结点中不是包含一个或几个关键字,而是只含有组成关键字的符号。例如,若关键字为数值,则结点中只包含一个数位;若关键字为单词,则结点中只包含一个字母字符。这种树会给某种类型关键字的表的查找带来方便。举例:{CAI,CAO,LI,LAN,CHA,CHANG,WEN,CHAO,YUN,YANG,LONG,WANG,ZHAO,LIU,WU,CHEN}我们先针对首...原创 2019-03-27 15:06:58 · 482 阅读 · 1 评论 -
数据结构 || 求连通图的关节点
对图的存储结构基于无向图的邻接多重表。关节点和重连通图:假若在删去顶点v以及v相关联的各边之后,将图的一个连通分量分割成两个或两个以上的连通分量,则称顶点v为该图的一个关节点。如果没有关节点的连通图则称为重连通图(双连通图)。算法实现:1. 方法一:最简单也是最直接的算法是,删除一个点然后判断连通性,如果删除此点,图不再连通,则此点是关节点,反之不是关节点(图的连通性一般通过深搜来判定...原创 2019-01-23 15:06:21 · 2945 阅读 · 0 评论 -
图的最小生成树 || Prim算法和Kruskal算法的c++实现
Prim算法和Kruskal都是典型的贪心算法,也就是在求解最小生成树时,我们总是不从全局考虑,而每次仅仅是考虑局部最优解。下面的算法都基于无向图的邻接多重表。Prim算法:算法描述:基本步骤:设R是有n个定点的对称连通关系。1)选取R的一个定点v1,设V = {v1}, E={}。2)选取与vj ∈ V邻接的V的最近邻元vi, 并且边(vi, vj)不与E中元素形成回路。添加vi到...原创 2019-01-23 01:42:25 · 1767 阅读 · 0 评论 -
计算机视觉 || 灰度直方图处理以及改进办法(hsv空间以及边缘检测)
题目:用 CImg 编写灰度图像直方图均衡化:(a) 同学用手机拍摄不同光照情况下的图像,作为测试样本,不低于 5 张;(b) 分别针对灰度图像和彩色图像分别用直方图均衡化的方法完成结果;© 最后对实验结果进行分析,特别是彩色图像直接采用直方图均衡化效果如何进行分析,如果要改进应该从哪些方面进行改进。直方图均衡化:算法实现:整个模块的核心代码是直方图均衡化函数:CImg&lt;in...原创 2018-11-20 23:15:52 · 1659 阅读 · 0 评论 -
计算机视觉 || 霍夫变换
计算机视觉测试报告王培钰 16340220 电子政务原理:直线:一条直线在图像中是一系列离散点的集合,通过一个直线的离散极坐标公式,可以表达出直线的离散点几何等式如下:X∗cos(theta)+y∗sin(theta)=rX *cos(theta) + y * sin(theta) = rX∗cos(theta)+y∗sin(theta)=r其中角度theta指r与X轴之...原创 2018-10-30 18:06:17 · 666 阅读 · 0 评论 -
计算机视觉 || Canny算子实现边缘分割并进一步处理
Ex2:用 CImg 重写、封装给定的 Canny 代码,并测试附件有三个Canny相关的Code以及测试数据若干(测试数据自己转化成BMP图像);同学按照各自学号最末尾的数字除 3 取余数,余数为 0 的改写 Code0,余数为 1的改写 Code1,余数为 2 的改写 Code2;封装要求:(1)所有的图像读写、数据处理只能用 CImg 库(整个工程文件不允许使用 Opencv ...原创 2018-10-19 21:31:24 · 2431 阅读 · 0 评论 -
数字图像处理 || 拉普拉斯算子锐化滤波&&标定差度方法
c++ CImg库采用标定和为标定两种实现算法未标定:CImg&lt;int&gt; laplace_filter(CImg&lt;int&gt; img) { MatrixXd m(3, 3); for(int x = 0;x &lt; 3; x++) { for (int y = 0; y &lt; 3; y++) { if (x == 1 &amp;&原创 2018-09-29 11:29:13 · 3566 阅读 · 2 评论 -
数字图像处理 || CImg实现平滑空间滤波
1.平滑滤波:自己实现了用于空间平滑滤波的函数:CImg&amp;lt;int&amp;gt; Smooth_filter(CImg&amp;lt;int&amp;gt; img, int num) { CImg&amp;lt;int&amp;gt; m(num, num); cimg_forXY(m, x, y) { m(x, y) = 1; } int w = img.width(), h =原创 2018-09-28 12:06:40 · 539 阅读 · 0 评论 -
数字图像处理 || c++对图像进行对数变换,幂律变换,比特面分层以及均衡化处理
对数变换:CImg<int> SrcImg;SrcImg.load_tiff("E:/Desktop/picture_process/Lenna/3/Fig0305(a)(DFT_no_log).tif");SrcImg.display();cimg_forXY(SrcImg, x, y) { SrcImg(x, y) = int(log(double(SrcImg(x, y...原创 2018-09-27 21:19:18 · 2435 阅读 · 1 评论 -
关于CImg载入jpg,png等格式图片失败的解决方法
先去官网下载imagemagick软件:下载地址之后来到安装目录,将目录下的convert.exe以及CORE_RL_开头的dll拷贝到工程项目文件夹下或者visual stdio直接丢到vc的include里面便可使用。...原创 2018-09-26 16:21:45 · 2143 阅读 · 2 评论 -
数字图像处理 || c++实现半色调程序
利用c++的CImg库和用于矩阵处理的Eigen库来实现编译工具:visual stdio(建议使用,之前我也使用sublime来配置c++的各种库,总是各种bug)题目:Image Printing Program Based on Halftoning The following figure shows ten shades of gray approximated by do...原创 2018-09-26 15:41:55 · 1864 阅读 · 1 评论 -
C++ 图像处理库【CImg】配置以及简单使用
1. CImg的配置下载CImg的包到指定的文件夹下,解压然后只需要在编写的cpp或hpp文件中加入#include "XX/CImg.h" // XX/是指CImg所在的路径using namespace cimg_library;编译命令(环境为windows下的MinGW)g++ -o HelloWorld.exe HelloWorld.cpp -O2 -lgd...原创 2018-09-11 17:56:27 · 14707 阅读 · 3 评论 -
计算机视觉 || Color transfer between images(lab颜色空间)
题目:可以根据课程 PPT 和对应参考文献(“Color transfer between images”)实现颜色转换。(a) 测试图像集合不低于 5 对图像(参考图和原图);(b) 最后对实验结果进行分析,特别是存在问题进行分析,给出初步的改进建议方法和给出参考文献。图像间的颜色转化:这个算法的核心关键在于两部分:1是rgb空间和lab空间的相互转化2是在lab空间根据两幅图提...原创 2018-11-20 23:21:34 · 1142 阅读 · 0 评论 -
计算机视觉 || ImageMorping
实现过程:1. 网格的生成将源图像和目标图像通过建立特征点,形成点集,然后通过三角剖分的方法形成三角形网络1)把源图像中形成的三角形和目标图像生成的三角形(三角形对)对应起来。(对整体的源图像和目标图像来说,他们划分出网格之后,应该是同构的。)因此将源图和目标图中需要建立网格的同构点存到两个文本中,再将所需要建立的图片的三角形网格对应的坐标位置存储在另一个文本中://读入源图中面部特征点...原创 2018-11-20 23:04:14 · 518 阅读 · 0 评论 -
数据结构 || 图深度优先搜索遍历以及求两点间的简单路径
本文图的存储结构是基于无向图的邻接多重表实现的图的深度优先搜索的递归遍历void DFS(AMLGraph G, int i) { cout << G.adjmulist[i].data << endl; visit[i] = visited; for (int w = FirstAdjVex(G, i); w >= 0; w = NextAdjVex(G,...原创 2019-01-21 16:43:23 · 3678 阅读 · 4 评论 -
数据结构 || 图中两点间的最短路径(弗洛伊德算法)
原理讲解参考:https://www.cnblogs.com/wangyuliang/p/9216365.html代码实现:#include <iostream>#include <limits.h>#include <string>#include <vector>#include <iomanip>using names...原创 2019-01-25 15:47:09 · 1430 阅读 · 0 评论 -
数据结构 || 图中两点的最短路径(迪杰斯特拉算法)
从某个顶点出发到其他所有各点的最短路径迪杰斯特拉算法数据结构采用有向图的邻接矩阵存储。算法基本思想:依路径长度递增的次序来求各个路径。长度最短的路径一定是一条从源点直达的弧。其他长度的路径求原点到其最短路径一定是以下两种情况之一:源点到此点一条直通弧。前面已经求得的最短路径中的其他顶点中到它的直通弧。代码实现:#include <iostream>#inc...原创 2019-01-24 13:22:27 · 2949 阅读 · 0 评论 -
计算机视觉 || 图像分割进行A4纸矫正
图像分割进行A4纸矫正(1) 将图像从rgb空间转为灰度空间void ImageSegmentation::rgb2gray() { grayImg.resize(Img._width, Img._height, 1, 1, 0); cimg_forXY(grayImg, x, y) { double R = Img(x,y,0); double G = Img(x,y,1); ...原创 2018-12-21 00:47:02 · 1183 阅读 · 0 评论 -
计算机视觉 || 手写字体检测
手写字体的检测(1) Adaboost进行手写字体的检测导入mnist数据集import tensorflow.examples.tutorials.mnist.input_data as input_datadata_dir = '../MNIST_data/'mnist = input_data.read_data_sets(data_dir,one_hot=False)batch...原创 2018-12-21 00:33:54 · 2030 阅读 · 0 评论 -
信息安全技术 || c++实现MD5
MD5算法简介:消息摘要算法第五版(英语:Message-Digest Algorithm 5,缩写为MD5),是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一(又译哈希算法、摘要算法等),主流编程语言普遍已有MD5的实现。将数据 (如一段文字)运算变为另一固定长度值,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5由MD4、MD3、MD2改进而来,主要增强算法...原创 2018-12-09 19:59:05 · 549 阅读 · 0 评论 -
计算机视觉 || 图像拼接(Image Stitch)
编译运行:运行环境:Ubuntu 18链接库:VLFeat&amp;&amp;CImg编译命令:g++ -o test main.cpp ImageStitching.cpp ImageStitching.h -lpthread -l X11 -Lglnxa64/ -lvl -O3 -std=c++11(linux下编译比较简单,只需将CImg.h文件和用到的vl库放在同目录下,但是...原创 2018-12-09 19:49:03 · 3990 阅读 · 0 评论 -
多媒体技术 || JPEG压缩算法
编译环境windows10下MinGW编译语言c++ && CImg库运行命令g++ -o test main.cpp jpegCompress.cpp jpegCompress.h -O2 -lgdi321. 8x8分块因为之后的DCT变换是要对8x8的子块为一个单位进行处理,所以为了方便第一步我们就进行分块。所以源图的width和height必须要是8的倍数,所以...原创 2018-12-09 19:30:48 · 1603 阅读 · 1 评论 -
C++ | Tree的实现(适用于一般的树)
其实主要是采用类似c这种面向过程的语言的接口实现办法,用c++更多只是为了调用队列,栈等一些接口网上资料大部分树的实现都是二叉树,而实际常见的树一般是普通的树所以我们要学会通过二叉树的思想来转换到普通的树来使用本文采用的存储结构为(孩子-兄弟)结点表示法,也叫二叉链表,有不懂得地方可以查看我的另外一篇关于树的存储结构的文章本文重点讨论三个函数,其他实现函数都大同小异 求树的深度打印树...原创 2018-09-11 11:32:13 · 26016 阅读 · 1 评论