自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 Unity矩阵matrix4x4的应用:世界空间与模型空间的坐标系转化

文章目录前言一、矩阵 Matrix4x4?二、应用过程1、案例分析2、函数介绍Matrix4x4.TRSMatrix4x4.MultiplyVectorMatrix4x4.MultiplyPointMatrix4X4.inverseMatrix4X4.rotation3、实际代码总结前言 近期由于项目需求,研究了一下通过矩阵来转换不同坐标系,接下来就简单记录一下。一、矩阵 Matrix4x4? UnityEngine.Matrix4x4 是 Unity 提供的方便矩阵计算而封装的一个结构体,提供

2020-09-04 20:45:04 4626

原创 Python自定义模块的打包方式 (failed to execute pyi_rth_pkgres 的解决方法)

近期需要做一个python工具,供其他模块使用,就涉及了自定义模块的导入。这边就主要是做一个备忘…不纠结格式了一、准备工作:1、确定 __init__.py 文件首先我们需要明确下我们的目的,是将我们需要的文件打包成模块,使之可以被 pip install 简单的安装,被 import 方便的调用。那我们先确定下我们需要打包的模块:MyPack(忽略我的test文件夹)是我们想要打包出来的一个模块。它包含了__init__.py文件以及我们自己写的一些.py文件。这里需要说明的一点是,__.

2020-06-20 19:24:33 893

原创 SendMessage、PostMessage、keybd_event 发送键盘事件 及 虚拟键码表

大致介绍SendMessage 与 PostMessage  两者从函数结构上看主要区别其实就是返回值不同,SendMessage返回消息被处理后的返回值,而PostMessage则返回消息是否发送成功。  其次,SendMessage是同步的,而PostMessage是异步的。SendMessage会等待消息被处理完成之后再返回,PostMessage则会将消息放入处理队列中直接返回。...

2019-11-27 17:33:44 14725 2

原创 VS2019离线安装方法

近期由于公司的保密需求,需要在内网开发部分项目功能。内网的环境就让人很不习惯(居然是vs2010??),于是就尝试着搞一个VS2019的离线安装包。查阅了相关资料之后(也踩过一些坑之后),最终还是完成了想要的结果。制作离线安装包其实,官网DOC 中,也有对离线包的制作介绍,我这边只是做了个总结。下载安装工具首先,下载 visual studio install,一般来说,vs_comm...

2019-08-28 10:57:57 5188 3

原创 Unity利用UGUI中Graphic绘制曲线图

我们在创建可视UI组件时,可以通过继承Graphic来实现一些UI上的绘制功能。官方案例 中通过重写了 OnPopulateMesh 函数实现了一个绘制彩色四边形的效果。利用该方法,结合一些对地形数据的处理,我们可以制作像下图这样的地形剖面图效果:...

2019-07-24 10:29:55 6110 5

原创 Unity 中 Xml 操作

Unity 中 Xml 操作生成读取更新 添加 删除我们在开发过程中避免不了对数据的存储,像字符串的处理方式XML就是一个很好的栗子。接下我们来研究一下关于XML文件的生成与解析。当然,大家完全可以参照 官方API 来学习;生成Xml 文件创建最主要的步骤就是对节点的排序,节点间的关联就是靠着这个排序完成的。主要用到的函数包括下 CreateElement、SetAttribute 与 A...

2019-04-28 11:17:42 3808

原创 AssetBundles 打包与几种加载方式

打包:首先,新版本的Unity提供的打包工具 AssetBundlesBrowser 很方便,极力推荐,版本高的话可以在 Package 中找到。使用方法的话,可以参考 这篇文章。除此之外,手写 Editor 代码也是一个很不错的选择。代码一定要放在 Editor 文件下!主要的过程其实很简单,先通过AssetImporter 修改一下 assetBundleName(与asset...

2019-04-13 12:07:34 493

原创 STL(下篇)

上篇我们简单的介绍了下STL概念,接下来,将对几个容器详细展开:1、set :上篇我们讲到set的默认排序方式是从大到小的,在添加自定义类型时,由于编译器不知道怎么排序,我们需要重载()运算符来比较大小。class MySort{public: // 重载()运算符,用来比较 student 的大小 bool operator()(const Student &s1, const St

2017-10-09 19:21:13 211

原创 STL语句

STL从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。STL的一个重要特点是数据结构和算法的分离。1、容器:用来管理一组数据,下面介绍几种常用的容器1)string:string

2017-10-08 21:16:51 2884

原创 异常和文件操作

引子:类型转换1)普通类型之间的转换:static_cast 凡是可以隐式转换的地方都可以用,在编译时进行类型识别 a = ststic_cast(d);2)指针之间的转换:reinterpret_cast 可用来在指针和整型之间转换 p = reinterpret_cast(pd);3)层次间转换:dynamic_cast 在运行时进行类型识别,基类和派生类之间转换;类型匹配

2017-09-28 09:41:06 373

原创 函数模板与类模板

1、函数模板:所谓函数模板,就是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,凡是函数体相同的函数都可以用这个模板来代替。函数模板的出现将算法与数据类型相分离,专注于算法的设计。   1)函数模板的定义是通过关键字 tamplate 来实现的。如:tamplate // 注意末尾没有分号void test(T a){}2)调用方式: test(a, b

2017-09-25 09:53:21 284

原创 多态

我们在类的应用中会遇到这样的问题,当我们在子类中定义了与父类中原型相同的函数(上篇中提到的重定义)时,我们如果需要通过基类的指针来获取子类函数的调用就很难实现,为了解决这样的问题,C++就引入了虚函数的概念,C++中就是通过virtual 关键字对多态进行支持。1、重写:编译器判断是否为虚函数,根据传的类型不同去调用不同的函数。虚函数:通过关键字 virtual 修饰的函数。 此时,子

2017-09-23 18:55:05 432

原创 继承与派生

首先,我们来认识一下类与类之间的关系有哪几种:1、has_A 组合 包含关系,类中包含另一个类的对象2、use_A 使用关系,类中使用了另一个类的成员函数3、is_A 继承关系,B是特殊的A,B从A继承过来,A中有的B中都有继承的语法: class 类名 :访问控制权限 要继承的类的名字 class C_XY:public XY {}; // C_XY是继承自XY的子

2017-09-22 09:18:08 272

原创 运算符重载

运算符重载: operator关键字用来重载运算符1、概念1)本质是一个函数,函数名的组成方式是:operator + 要重载的运算符  运算符的重载函数可以写到类的内部,但内外只能有一个(尽量写内部,内外的实现方式由于传参方式不同实现代码不同在一些复杂的运算时会有不同)2)有部分运算符不能重载   .   ::    .*    ?:   sizeof3)重载步骤:首先写出函

2017-09-20 15:51:21 220

原创 类和对象

我们C++面向对象的三个重要内容就是:封装,继承和多态,今天我们就浅谈一下封装的概念。C++的封装,实现方式就是用 class 关键字来声明类。在类中,成员变量叫做属性,成员函数叫做方法。1、类的访问控制:public :共有属性,类的内部外部都可访问private:私有属性,类的外部禁止访问protect:保护属性,用于继承中,类内部专属

2017-09-20 14:18:38 237

原创 C到C++的过渡

为了强化我们的C语言编程能力,提高编程的代码质量,更是由于嵌入式软件工程师岗位的需求,我们即将开始C++语言的学习。当然,学习C++语言也为我们以后接触一些其他编程语言提供了良好的基础。我们一直说的C++与C的最大区别就在于,C++是面向对象的,即C语言+面向对象方法论就成了我们的C++。而什么是面向对象呢,通俗的说就是将现实世界中的事物直接映射到程序中,可直接满足用户需求。

2017-09-18 14:24:36 479

原创 新手上路系列11:网络编程基础知识与服务器搭建

1、TCP / IP 理论基础1) 对于网络理论介绍一般采用OSI七层网络模型,但linux 中网络栈的介绍一般分为四层的Internet模型,分别是:应用层、传输层、网际层、网络接口。其中需要提的是传输层。它对应的网络协议有TCP与UDP。传输控制协议(TCP)的可靠性与准确性强,由于它 的“三次握手”传输速度就相对较慢。而用户数据报文协议(UDP)是一种不可靠的非连接型传输方式。但

2017-08-17 10:40:25 383

原创 新手上路系列11:多线程编程

1、基本概念:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属于一个进程的其他的线程共享进程拥有的全部资源。在Linux 中有着成熟的库函数,需要使用pthread.h头文件,而且编译时需要加上 -lpthread。2、线程的操

2017-08-15 21:00:16 182

原创 新手上路系列10:信号量与信号通信

1、信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P)和发送(即V)信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。信号量的出现,主要是由于需要一种这样一种访问机制,让一个临界区同一时间只有一个进程在访问它,也就是说信号量是用来协调进程对共享资源的访问。由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv

2017-08-14 17:01:02 362

原创 新手上路系列9:进程间通信

1、两个程序之间传递数据的一种简单方法是使用popen与pclose。FILE *popen(const char *command, const char *type); popen函数允许一个程序将另一个程序作为新进程来启动,并可以传递数据给它或者通过它接收数据。command 字符串是要运行的程序名和相应的参数。type必须是"r"或"w"。"r"调用函数可以利用FILE*指针来读取

2017-08-14 15:23:10 229

原创 琐记9:利用标准i/o实现文件间的运算

之前看到了这样一道题目:手动创建两个文本文件 text1.txt,text2.txt,要求编程创建 text3.txt,实现 text1.txt 和 text2.txt 文件中除去首行和末尾对应的数据相加。题目中的首行和末尾分别是单词 begin 和 end, 但它给的数据是这样的:text1:10 11 12 ,20 21 22 , 30 31 32 ;text2:15 16 17 , 25

2017-08-11 10:08:12 263

原创 琐记8:恐怖的僵尸进程与温暖的守护进程

1、被我标题吸引进来的同学先不要着急,在讨论标题中的内容之前,我们需要先了解下进程的终止:exit 与_exit 函数都是用来结束进程的函数,首先是exit:它的头文件: ,其次它用来正常结束当前进程,并把参数status返回给父进程,而进程所有的缓冲区数据也会自动写回并关闭未关闭的文件。而_exit 函数的头文件为:,该函数会在结束进程时清空缓冲区。2、僵尸进程:当一个进程的子进

2017-08-10 14:31:23 260

原创 新手上路系列8:进程控制的相关知识

1、首先,进程的即是指程序执行的实例,它是运行中的程序。进程的状态包括三种:执行、就绪和阻塞状态。执行状态的进程占用着CPU,而就绪状态的进程则是在等待分配CPU,最后的阻塞状态就是更低一级的状态,它等待着进入就绪状态。进程和文件类似,每一个打开的进程都有它自己的ID(PID),可以使用ps 命令来查看它的ID,常用的有 “ps -ef”命令。当然一次显示的进程太多你也可以通过管道抓取一部

2017-08-10 10:20:05 226

原创 琐记7:关于fork()函数的一些小知识

首先,fork() 函数的主要功能通俗的说是创建一个子进程。这2个进程是相互独立的两个进制,它们共享的内容只有代码段。这时候就要提到我们之前学到 的一个知识点——内存四区了,在栈,堆,数据段和代码段这四个大块中,它们父子俩的前三个是完全区分开的

2017-08-10 10:14:25 237

原创 通讯录程序的改进——文件备份

根据最近学习的文件的读写将之前的通讯录进行了一些改进,在程序开始之前加上了一个读入函数,程序末尾加上了一个写出函数。这样,在程序结束的时候,通讯录中的数据将会以文件的形式保存下来,下次再进入程序时,从文件中读取数据就能达到文件备份的效果了。

2017-08-08 15:59:53 325

原创 新手上路系列7:系统调用函数与标准i/o实现文件的复制

系统调用函数与标准i/o实现文件的复制,以及关于文件权限mode的一些小细节。

2017-08-07 08:54:50 640

原创 琐记6:随机分组

将40个数按4个一组随机分成10组打印出来: 实现的方法应该有很多,这里就介绍一种利用数组元素的交换来实现的方法。可以利用一个随机函数获取一个40以内的随机数作为下标,将它的值与末尾值交换,再获取一个39以内的随机数,再将它的值与倒数第二个数交换,依次交换后就可以得到一个随机数组了。

2017-08-06 20:21:15 455

原创 排序:快速排序

快速排序的代码实现

2017-08-06 09:05:00 187

原创 排序:归并

归并排序的代码实现

2017-08-05 11:46:54 179

原创 排序:堆排序

堆排序的代码实现

2017-08-05 11:46:30 162

原创 排序:希尔排序

介绍了2种希尔排序的实现方式。

2017-08-05 11:46:16 161

原创 排序:插入排序以及其改进:二分法插入

插入排序可以理解我们打牌时,摸一张牌按顺序插入一张。

2017-08-05 11:45:54 288

原创 排序:冒泡与选择的改进

之前写过冒泡与选择排序,但程序稍显稚嫩,现在来回顾顺便改进一下这两种简单的排序:(之后用到的交换和打印函数都是这边的,不再敲出来了)

2017-08-05 11:45:00 354

原创 干货8:二叉树

二叉树的代码实现

2017-08-05 11:44:44 189

原创 干货7:树

树的代码实现

2017-08-05 11:44:22 206

原创 称不上项目的小程序3:计算器

这是用2个栈实现一个小计算器功能,包含的运算符有:+ , - , * , / , ( , ) ,可谓“功能强大”!

2017-08-05 11:02:35 231

原创 称不上项目的小程序2:停车场

本停车场只有10个车位,只有1个大门,车停满了只能在候车便道等着,有车走了再能继续进入。另外,停车场中的车要离开时,由于通道窄,在它后面的车要先退出来,等它走后再依次进入(我不管,我的停车场就是这么傲娇,我宁愿请工人来帮车主开进开出的让道也不要花点钱扩大的通道)。

2017-08-05 10:45:06 509

原创 称不上项目的小程序1:通讯录

这是之前刚接触结构体的时候写的一个小程序,而且也是第一次写一个篇幅这么长的程序,很多地方都想得不是很完善,比如main函数中的很多语句完全可以放在.c 函数中去实现,还有main中的整体结构框架可以用switch case 语句来实现,这样程序就不会显得像现在这样臃肿。不过,作为第一次完成的“作品”,至少添加,列举,搜索,删除(包括同名好友的删除)等基本操作还是可以一一实现。至于好友ID号的问题,边上一些觉得应该是用户自己输入,但这样总觉得哪里怪怪的(虽然我也自己动手实现了一下那样的功能),所以还是坚持自己

2017-08-05 10:23:33 262

原创 干货6:链式队

链式队列的代码实现

2017-08-04 17:57:20 190

原创 干货5:顺序队列

顺序队的代码实现

2017-08-04 17:51:24 146

MicrosoftRootCertificateAuthority2011.zip

MicrosoftRootCertificateAuthority2011 证书, 解决了 “无法建立到信任根颁发机构的证书链” 问题

2019-08-28

空空如也

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

TA关注的人

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