- 博客(32)
- 收藏
- 关注
原创 I/O多路复用:select、poll、epoll
文章目录selectpollepoll事件响应过程:事件触发模式:代码select代码poll代码epoll代码目前支持I/O多路复用的系统调用有select、poll、epoll,I/O多路就是通过一种机制,一个线程可以监视多个文件描述符,一旦文件描述符就绪,能够通知程序进行相应的读写操作。select、poll、epoll本质上都是同步I/O操作,因为他们都需要在读写事件就绪后由线程自己负责读写操作,整个读写过程使阻塞的。而异步I/O是不需要自己进行读写的,内核会负责将数据从内核拷贝到用户空间。多路
2022-03-30 10:08:14
1629
原创 PostMesh源码运行教程
PostMesh源码运行教程安装环境:windows10Visual Studio 2017OpenCascade - CAD processing(官网可能不太好下,后面是我百度网盘下载链接,提取码:q12w)Eigen - Matrix operations and SIMD vectorisationCython - Cython bindingsNumPy - Python interface(后面两个我没下载,可能是因为本地有把)安装步骤:第一步:在g
2021-04-16 15:24:50
269
原创 ARAP参数化算法
ARAP参数化算法实现综述三维模型的参数化把三维模型映射到二维平面,LSCM在映射的过程中尽可能地保持三角形的角度相同,ARAP参数化算法在LSCM的基础上尽可能的保证三角形没有扭曲地映射在二维平面上。算法设计因为需要映射过程中尽可能保持三角形没有扭曲,所有发生变换的矩阵为旋转矩阵。我们可以通过限制变换矩阵,得到相应参数化结果。假设三维模型上的一个三角形ttt表示为xt=x_t=xt={xt0,xt1,xt2x_t^0,x_t^1,x_t^2xt0,xt1,xt2},相应的映射后的三角形表
2020-08-16 12:24:50
9039
4
原创 Laplacian on Triangle Mesh
Laplacian on Triangle Mesh(三角形面上的拉普拉斯算子)局部平均区域基本思想是mesh面上的点x的值设置为其局部领域的平均。下图是几种具体的情况:其中蓝色区域为局部平均区域。Barycentric cell:三角形的重心和三角形边的中点相连Voronoi cell:三角形的外心和三角形的中点相连(对于钝角三角形可能会出现外心在外部)Mixed Voronoi cell:在Voronoi cell的基础上,将钝角三角形的外心替换成钝角对边的中点梯度拉普拉斯算子是梯
2020-08-14 12:31:46
1446
原创 Whitted-Style 光线追踪
Whitted-Style 光线追踪:生成相机光线定义光线每条光线相当于一条射线,具有两个固定属性(起点o以及方向d,此外参数t表示光线的长度)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G1w1edhJ-1595991814638)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200719153106780.png)]本节中所学习的光线类型为摄影机光线或主光线。对
2020-08-10 19:38:37
1184
1
原创 最小二乘保角参数化(Least Square Conformal Maps)
Least Square Conformal Maps框架:用的是中国科大傅孝明老师的框架:框架下载 安装教程概述LSCM是指最小二乘保角映射,不需要固定边界来进行网格模型参数化。所采用的目标函数的最小化值可以使参数化后的角度变形最小,同时最小值唯一(即解线性方程)。优缺点:减少了角度扭曲与不一致的缩放存在且具有唯一的最小值,避免局部最优解不需要确定边界的映射,因此可以作用于任意形状的边界会发生三角形的翻转与重叠参数化最好的情况映射前后的每个三角形面积与角度不变,在u保持角度不变的
2020-08-07 20:33:40
5847
9
原创 凸组合参数化
凸组合参数化框架:用的是中国科大傅孝明老师的框架:框架下载 安装教程推导最常用的一个方法就是Tutte’s embedding algorithm,将一个三角形网格面参数化至2D平面上。首先将边界点固定在2D的正方形或者圆形上(凸多边形),可以根据不同的权值进行对内部点坐标的计算。内点坐标的计算如下:使用均匀权值:均匀参数化是最早的固定边界参数化算法了。均匀参数化的基本思想是把网格的边界点映射到一个平面上的凸多边形,而内点坐标为其一环邻近点的凸组合,其权值取以它为中心点的一环的平均值。
2020-08-05 18:28:28
2526
转载 games101作业04:Bézier 曲线
games101作业04:Bézier 曲线内容Bézier 曲线是一种用于计算机图形学的参数曲线。在本次作业中,你需要实 de Casteljau 算法来绘制由 4 个控制点表示的 Bézier 曲线 (当你正确实现该算法时,你可以支持绘制由更多点来控制的 Bézier 曲线)。你需要修改的函数在提供的 main.cpp 文件中。bezier:该函数实现绘制 Bézier 曲线的功能。它使用一个控制点序列和一个OpenCV::Mat 对象作为输入,没有返回值。它会使 t 在 0 到 1 的范围内进
2020-07-16 19:05:55
1319
原创 games101作业02:Triangles and Z-buffering
games101作业02:Triangles and Z-buffering内容创建三角形的 2 维 bounding box。遍历此 bounding box 内的所有像素(使用其整数索引)。然后,使用像素中心的屏幕空间坐标来检查中心点是否在三角形内。如果在内部,则将其位置处的插值深度值 (interpolated depth value) 与深度缓冲区 (depth buffer) 中的相应值进行比较。如果当前点更靠近相机,请设置像素颜色并更新深度缓冲区 (depth buffer)。基
2020-07-15 20:11:05
4387
7
原创 games101作业1:旋转与投影
games101作业1:旋转与投影内容本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点 v0(2.0, 0.0, 2.0), v1(0.0, 2.0, 2.0), v2( 2.0, 0.0, 2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形。通过进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。get_model_matrix(float rotation_angle):逐
2020-07-15 16:19:40
9628
6
原创 计算机网络基础知识
计算机网络基础知识OSI七层模型(自顶向下)层次协议作用应用层DNS协议(53)、FTP协议(20,21)、HTTP协议(80)、HTTPS协议(443)、SMTP协议(25),DHCP(67,68,动态主机配置)为特定的应用程序提供数据传输服务表示层URL加密、口令加密、图片编解码数据压缩、加密以及数据描述会话层服务器验证用户登录、断点续传建立端连接并提供访问验证和会话管理(SESSION)传输层TCP协议、UDP协议为网络不同主机上用户进程提供
2020-06-10 17:25:18
6958
原创 C++基础语法面试题
C++基础语法面试题malloc/free和new/delete的区别int *p;p = (int*)malloc(sizeof(int) * 128);//分配128个(可根据实际需要替换该数值)整型存储单元,//并将这128个连续的整型存储单元的首地址存储到指针变量p中int *parr;parr = new int[100](0);//返回类型为int *类型(整数型指针),分配大小为sizeof(int) * 100;//初始化为0共同点是:都是从堆上申请空间,并且需要用户
2020-06-10 17:11:15
2807
原创 计算机组成原理基础知识
计算机组成原理基础知识计算机系统概述冯 诺依曼计算机(普林斯顿)的主要设计思想是什么?采用二进制形式表示数据和指令;指令由操作码和地址码组成采用存储程序和程序控制:把编写好的程序和原始数据预先放入计算机主存储器中,使计算机工作时可以连续、自动、高速地从存储器中去取出指令并执行指令顺序执行,程序分支由转移指令实现计算机硬件系统由运算器、控制器、存储器、输入设备和输出设备组成计算机以运算器为中心,数据的传送通过运算器完成(现代以存储器为中心)哈弗结构:指令和数据分开存放,所以可以进行同时取
2020-06-10 17:07:53
8746
原创 经典排序算法
文章目录十大经典排序算法1、冒泡算法算法描述:动画演示:代码实现:算法分析:2、选择排序算法描述:动画演示:代码实现:算法分析:3、插入排序算法描述:动画演示:代码实现:算法分析:4、希尔排序算法描述:动画演示:代码实现:算法分析:5、归并排序算法描述:动图演示 :代码实现:算法分析:6、快速排序算法描述:动画演示:代码实现:算法分析:7、堆排序算法描述:动画演示:代码实现:算法分析:8、基数排序算法描述:动画演示:代码实现:算法分析:十大经典排序算法排序算法平均时间复杂最好情况最坏情况
2020-06-10 17:00:15
694
原创 数据库面试题
文章目录范式事务事务的隔离级别数据库故障与恢复数据库锁机制触发器的作用什么是存储过程?什么是视图?数据完整性索引varchar与char的区别关系型数据库和非关系型数据库区别?数据库:三级模式外模式:数据库用户可以看到并允许使用的那部分局部数据的逻辑结构和特征的描述模式:数据库中全体数据的逻辑结构和特征的描述内模式,数据库存储结构的描述DB:数据库DBMS:数据库管理系统,管理控制...
2020-05-12 23:57:52
592
原创 路由器与交换机的区别与联系
路由器与交换机的区别与联系他们在哪里工作?根据OSI模型的网络体系划分,自底向上,路由器工作在第三层(网络层),而我们常说的交换机工作在第二层(链路层)(目前有更加高级的三层交换机,四层交换机,甚至还有七层交换机)它们怎么工作?它们的主要工作如下:路由器:寻址,转发(依靠IP地址)交换机:过滤,转发(依靠MAC地址)我们可以看出这两者的主要工作就是转发数据,但是不同之处是,依靠的地...
2020-04-14 16:49:02
733
原创 C++成员函数在内存中的存储方式
C++成员函数在内存中的存储方式用类去定义对象时,系统会为每一个对象分配存储空间。如果一个类包括了数据和函数,要分别为数据和函数的代码分配存储空间。按理说,如果用同一个类定义了10个对象,那么就需要分别为10个对象的数据和函数代码分配存储单元,如下图所示。能否只用一段空间来存放这个共同的函数代码段,在调用各对象的函数时,都去调用这个公用的函数代码。如下图所示。显然,这样做会大大节约存储空...
2020-04-14 13:50:03
465
1
原创 汉诺塔问题
汉诺塔问题汉诺塔I有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘; 大盘不能叠在小盘上面。 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。问:如何移?最少要移动多少次?思路:递推式:f(i)=2*f(i-1)+1;将上面的n-1个通过b从a移动c将...
2020-04-06 20:46:35
748
原创 广播,单播和多播的区别
广播,单播和多播的区别单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?.1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,...
2020-04-05 12:55:52
2141
原创 简单线程池
#ifndef ThreadPool_h#define ThreadPool_h#include <vector>#include <queue>#include <thread>#include <mutex>#include <condition_variable>#include <future>#inc...
2020-02-24 13:55:12
113
原创 socket实现简易聊天室
socket实现简易聊天室windows操作系统上用TCP协议(cs架构)服务器客户端1.请求协议版本1.请求协议版本2.创建socket2.创建socket3.创建协议地址族、ip地址、网络端口、通信协议3.获取服务器协议地址族4.绑定5.监听6.等待客户端连接4.连接服务器7.通信5.通信8.关闭socket6....
2020-02-08 22:01:59
1558
1
原创 TCP的三次握手与四次挥手
TCP的三次握手与四次挥手TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。TCP数据报结构[外链图片转存失败,源站可...
2020-02-07 22:29:23
144
原创 C++11智能指针
C++11智能指针为什么要使用智能指针:智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。1.auto_ptr (c++98的方案,...
2020-02-06 19:36:27
199
原创 C++强制类型转换运算符
C++强制类型转换运算符将类型名作为强制类型转换运算符的做法是C语言的老式做法,C++ 为保持兼容而予以保留。C++引入了四种功能不同的强制类型转换运算符:static_cast、reinterpret_cast、const_cast和dynamic_cast。强制类型转换有一定的风险,有的转换不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针...
2020-02-05 23:19:12
444
原创 C++ STL基础
1、选择C++刷算法的理由1.C++速度快(C不是更快么,java太慢了)2.C++有STL(什么是STL)——使用很方便的类库3.如何使用STL进行高效刷算法4.好处:刷算法,学习成本极低5.如何从C到C++(仅基础语法到刷算法程度)俗话说:磨刀不误砍柴工不会c++仍然可以做,但是效率低2、输入输出C++保留了C的scanf和printf,增加了额外的cin与cout例...
2020-02-04 20:27:28
287
转载 C++中拷贝构造函数与赋值函数
这里我们用类String来介绍这两个函数:拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用拷贝构造函数。为啥形参必须是对该类型的引用呢?试想一下,假如形参是该类的一个实例,由于是传值参数,我们把形参复制到实参会调用拷贝构造函数,如果允许拷贝构造函数传值,就会在拷贝构造函数内调用拷贝构造函...
2020-02-04 02:06:27
480
原创 C/C++中引用和指针的联系与区别
C/C++中引用和指针的联系与区别为什么C/C++语言要使用指针?1、每种编程语言都会使用指针,C++将指针暴露给用户(程序员),而JAVA和C#等语言将指针隐藏起来了。2、指针能够有效的表示数据结构;3、能动态分配内存,实现内存的自由管理4、方便使用字符串和高效使用数组5、指针直接与数据的储存地址有关,比如:值传递不如地址传递高效,因为值传递先从实参的地址中取出值,再赋值给形参代入函...
2020-01-22 14:40:17
622
原创 C++中static关键字的作用
C++中的static关键字的作用总结C++中的static的两种用法:一种是面向过程程序设计,第二种是面向对象程序设计。前者应用于普通变量和函数,不涉及类;后者涉及static在类中的作用。1.面向过程设计中的static1.1 静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#incl...
2020-01-22 11:41:37
3829
1
原创 浅尝递归思路求解
这里写阿达自定义目录标题什么是递归:欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导...
2020-01-20 00:40:01
443
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人