- 博客(23)
- 收藏
- 关注
原创 【数据结构】二叉树
若高度为h的完全二叉树的节点数为n,则它和同样高度为h的满二叉树的前n个节点可以一一对应。这里我们将根节点的索引定为1,从上往下,从左往右,依次递增,最后一个节点的索引为n。将所有节点从上到下,从左到右的排序,顺序为两个子节点的节点,1个子节点的节点,0个子节点的节点,所以叶节点的开始索引为。二叉树是一种树形结构,一个节点最多有两个子节点,没有子节点的节点为叶节点,我们设二叉树的节点数为n。节点到其叶节点的最长简单路径中边的个数是节点的高度,树的高度为根节点的高度。,有1个子节点的节点的个数为n。
2024-04-01 16:28:34 790
原创 vscode调试Unity
那么是vscode连接到Unity,Unity是服务端,vscode是客户端;所以,我们开始运行lua的时候,需要和vscode建立连接,建立连接的API在。现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是,然后安装它,它会自动帮你安装上。字段,可以猜出emmylua和unity的连接是使用网络协议连接的,所以ide和debugger必定一个为服务单,一个为客户端。,无法成功附加,原因应该是你没有选择附加的Unity对象。
2024-03-29 15:54:06 2855
原创 【几何】平面方程
我们知道两个垂直向量的点乘为0,则平面的法线和平面上任意两点组成向量的点乘也为0。和上面一般式的求取过程是一样的,只不过得到的最后的表达方式不同。已知平面的法线和原点到平面的距离,求平面的方程。法线式和一般式几乎是一样的。= (A, B, C),平面上的任意一点为p。) ,现有任意一点p(x, y, z)。与xyz三个坐标轴的余弦值是多少呢?分别为平面与xyz轴的交点。为原点离平面的垂直距离。现在已知平面的一般式为。与xyz的夹角分别为。
2024-03-24 15:43:04 2301
原创 [unity]使用EditorUtility.CopySerialized复制脚本时要注意脚本中对其他物体的引用
A和B互相引用,使用EditorUtility.CopySerialized复制后得到C和D后,C引用的是B,D引用的是A,这时C和D的引用需要重新指定。
2021-11-16 17:41:36 2835
原创 [unity]计算子节点到父节点的长度不能使用子节点的localPosition的长度来计算
子节点的localPosition受父节点的localRotation的影响。最好使用Vector3.Distance(parentPos - childPos),如果要使用localPosition去计算则要现将localPosition乘以父节点的Transform.lossyScale,而lossyScale比较消耗性能。childTrans.localPosition * parentTrans.lossyScale。...
2021-11-16 11:51:46 2444
原创 [Unity]不要使用Mathf.Max()求大于2个数的最大值
Mathf.Max()当传入大于3个数的参数时,调用的是Mathf.Max(params float[] values),这样会new一个数组,会有GC。
2021-11-15 21:13:39 2271
原创 C++模板:静多态
一般,使用虚函数和继承实现的是动多态,即在运行期间确定调用者的类型。使用模板,可以实现静多态,在编译期间确定调用者的类型。例如我们要对某一类对象进行统一处理,使用虚函数可以这样实现:class BaseType{public: virtual void action1(){...} virtual void action2(){...}}class SubType1 : BaseType{public: virtual void action1(){...} vi
2021-07-10 15:16:43 485
原创 C++模板:包含模式
当我们组织模板代码时,对于模板函数,把模板函数的声明放在.h文件,模板函数的定义放在.cpp文件;对于模板类,将模板类的定义放在.h文件,成员函数的定义放在.cpp文件,编译器编译时会报错。// xx.htemplate<typename T>inline T const& max(T const& a, T const& b); // 模板函数的声明template<typename T>class MyClass // 模板类的定义
2021-07-10 00:39:44 193
原创 《c++ Templates》笔记 第五章 技巧性基础知识
关键字typename如果要访问依赖模板参数的类型名称,要在类型名称前添加关键字typenameclass Type{ class SubType { }}template<typename T>class MyClass{ typename T::SubType* ptr; // typename声明SubType是定义于类T内部的一种类型 T::SubType* ptr; // 不使用typename,T::SubT
2021-07-03 21:16:17 214 2
原创 《c++ Templates》笔记 第四章 非类型模板参数
非类型的类模板参数template<typename T, int MAX_SIZE> // MAX_SIZE不是类型,也可以作为模板参数class Stack{private: T elems[MAX_SIZE]; int numElems;public: Stack(); void push(T const&); void pop(); T top() const; bool empty() const{
2021-07-03 21:07:50 160
原创 《c++ Templates》笔记 第三章 类模板
// xx.h文件#include <stdexcept>#include <vector>template<typename T>class Stack{private: std::vector<T> elems;public: void push(T const&); void pop(); T top() const; bool empty() const { re
2021-07-03 18:44:05 110
原创 《c++ Templates》笔记 第二章 模板函数
模板参数的声明template<comma-separated-list-of-parameters> // template<用逗号隔开的参数列表>模板的定义和实例化// 模板的定义template<typename T>inline T const& max(T const& a, T const& b){ return a < b ? b : a;}// 实例化int a = max(1, 2);
2021-07-03 17:33:04 160
原创 unity调试package的源代码
我们通过Package Manager导入的包是无法调试源代码的,如果想要调试源代码,必须将包的文件夹手动复制到Assets同目录下的Packages文件夹中(不是编辑器中的,是文件资源管理器中的)。如果是一个新项目需要导入某个package,可以另外新开一个专门用来下包的项目,将需要的包下下来,包的文件夹保存在上图中的Library/PackageCache中。然后将包文件复制到新项目的Packages目录下;如果项目中已经通过Package Manager导入这个包了,需要先在Packa...
2021-06-28 23:06:45 1327 3
原创 《计算机组成原理》第一章 读书笔记
《计算机组成原理》 作者:娄国焕 刘晓悦 出版社:北京大学出版社冯·洛伊曼计算机体系结构的基本特点:1.计算机由运算器、控制器、存储器、输入设备和输出设备组成;2.采用存储程序的方式,程序和数据放在同一存储器中;3.数据以二进制码表示;4.指令由操作码和地址码组成;5.指令在存储器中按执行顺序存放;6.机器以运算器为中心(现代计算机以存储器为中心);存储器存储器是计算机中用于存放程序和数据的部件。存储器由存储单元组成,每个存储单元存储一个数据或一条指令,...
2020-11-06 18:12:43 303
原创 GLSL的in、out存储限制符使用错误
在GLSL中用in修饰的变量表示传入的数据,用out修饰的变量表示传出的数据,通过这样可以实现顶点着色器向片段着色器传递数据,但要注意这个变量的命名要相同,不相同的话,片段着色器是获取不到从顶点着色器传入的数据的。1.顶点着色器#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec3 aColor;layout (location = 2) in vec2 aTexCoord;out
2020-06-13 18:11:09 1056
原创 Opengl错误:“Error C5145: must write to gl_Position”
写opengl时,编译出现了这个错误,查了很久都没有找出问题,网上大部分说的是读取shader文件的时候出错了,或者将gl_Position拼错,或者是没有给gl_Position赋值。我检查我的代码都没有上面的问题,后来发现是API用错了。错误代码:vs = glCreateShader(GL_VERTEX_SHADER);glShaderSource(GL_VERTEX_SHADER, 1, &vsCode, NULL); // 错误用法glCompileShader(vs);
2020-06-10 21:52:00 4677
原创 读取3DMax的.obj文件,并优化顶点数据
数据结构struct vertex_t { float p[3]; float n[3]; float t[2];};struct mesh_t { vertex_t *vertices; unsigned short *indices; unsigned int vertexCnt, indexCnt; mesh_t(unsigned int vertex_count,...
2019-08-07 11:28:31 1258
原创 【c++】行为树
行为树节点接口enum STATUS{ STATUS_SLEEP, STATUS_RUNNING, STATUS_SUCCESS, STATUS_FAILURE,};enum TYPE{ TYPE_LEAF, TYPE_BRANCH,};class Node {public: std::string _name; // 节点的名字 int _Index[12...
2019-08-07 11:18:40 1716
原创 乘法如何突破位数限制
如果我们用int或double等进行乘法运算是有位数和精确度的限制,如何突破这种限制呢?当然只能自己写一个乘法运算。 如果我们用笔和纸进行乘法运算是没有位数和精确度限制的,那么我们是否可以模拟用笔和纸做乘法运算呢?在一定范围内是可以。首先我们可以肯定,一位数乘一位数是可以实现的,然后我们可以设置两个char数组a[n]和b[n]来个记录两个n位数,无论是小数还是整...
2019-04-21 16:08:56 354 2
原创 OpenGL鼠标移动方块
思路:用变量设定方块的坐标,然后根据鼠标的位移更改方块的变量坐标。注意:方块的绘图坐标系和世界坐标系是重合的,鼠标所在的坐标是以窗口的左上角为原点(0,0)的坐标系,窗口的左下角的世界坐标系为gluOrho2D(left, right, bottom, top)中的(left, bottom)。所以鼠标的坐标(xMouse, yMouse)转化为世界坐标(x, y)为: x = xMouse;...
2018-08-03 02:02:56 1602
原创 Breshenham画线算法及应用
Breshenham画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用增量整数计算。原理:当斜率小于 1 时,x 增加 1, y 增加 0 或 1.因此只需要判断 y 是增加 0 或 1. 算法:画线段(x0, y0)到(xEnd, yEnd), 线性方程 y = mx + b假设已经确定要显示的像素在(x_k, y_k), 那么下一步需要确定在列...
2018-05-16 22:40:43 2698
原创 非线性叠加算法
在游戏中,有许多属性的叠加是非线性的,这里以闪避为例子进行展开。单位目前的闪避为 a, 物品增加闪避 b, 单位得到物品的最终闪避为 c. (闪避的最大值为100%,这里用100来算,记为 limit)c = a + b* ( (limit - a)/ f(limit) ) | a<limit, b<limit, f(limit) > limitf(limit)为叠加衰...
2018-04-24 11:44:16 4521
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人