数据结构在C#
数组Array:顺序存储结构 优点:按位置索引很快,修改效率高。 缺点:需声明存放类型,且只能存放相同类型,必须指定长度(过长浪费,过短溢出),插入与删除很慢(排除特殊情况)。 数组ArrayList:顺序存储结构,解决了Array的缺点,由源码得知,默认容量为4,容量自增2倍。 不过由于容量是类成员,自增机制会引发线程安全问题,所以ArrayList不是线程安全的。 优点:无需指定长度,无需声明存放类型,可存放不同类型元素,底层是object,顺序存储结构常有优点这里都有。 缺点:由于底层元素是object,当为值类型时,存在装箱/拆箱操作,效率降低,且可能会有非类型安全问题。顺序存储结构常有缺点这里都有。 数组List:顺序存储结构,综合Array和ArrayList的优点,所以List也不是线程安全的。 优点:无需指定长度,长度自增。需声明存放类型,内部用Array实现,保证了类型安全。 缺点:顺序存储结构常有缺点都有。 所以现在基本上不使用Array和ArrayList,而是使用List。 双向链表LinkList:链式存储结构,非线程安全,可自己加锁实现线程安全。 优点...
数据结构-图
图 相关定义 表示方式 Graph: G(V,E) 由顶点的有穷非空集合和顶点之间的边组成。 线性表的数据元素叫元素,树中叫结点,图中叫顶点Vertex 无向边:两个随机顶点之间的边无方向,用无序偶(Vi,Vj)或(Vj,Vi)表示 有向边:顶点之间的边是有向的,用有序偶表示:<Vi,Vj>表示,与<Vj,Vi>是不同的。 又称为弧。 有向边总是<弧尾,弧头>的。从尾指向头。 简单图:不存在重复边,且不存在指向自身的元素的图。 无向完全图:任意两个顶点都有边,含有n个顶点的图有 n*(n-1) /2的边 有向完全图: 任意两个顶点存在互为相反的两条弧,则为有向完全图,n*(n-1) 稀疏图与稠密图: 边或弧数小于n * logn的图为稀疏图,反之为稠密图 网:图上的边指定权,则称为网。 子图:为父图的子集的图。 2.顶点与边的关系 2.1. 邻接与度 无向图 邻接点:对于G(V,E),如果边(V1,V2)属于E,则顶点V1,V2为邻接点。 边(V1,V2) 依附 (incident) 于顶点V1,V2 。或说边与顶...
深度优先与广度优先算法
深度优先搜索: 以递归的形式实现 递归实现特点: 栈的实现(非递归实现) 图的时间 DFS迷宫算法: 最小路径问题 广度优先搜索 队列的实现描述: 算法实现: 复杂度分析: 迷宫的复杂度分析: 最小开墙数的最短路径:
骨骼蒙皮动画(SkinnedMesh)的原理解析
取自: https://gameinstitute.qq.com/community/detail/127900 一、3D模型动画基本原理和分类 3D模型动画的基本原理是让模型中各顶点的位置随时间变化。主要种类有Morph(变形)动画,关节动画和骨骼蒙皮动画(SkinnedMesh)。从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是不一样的。 Morph(变形)动画 是直接指定动画每一帧的顶点位置,其动画关键中存储的是Mesh所有顶点在关键帧对应时刻的位置。 关节动画 关节动画的模型不是一个整体的Mesh,而是分成很多部分(Mesh),通过一个父子层次结构将这些分散的Mesh组织在一起,父Mesh带动其下子Mesh的运动,各Mesh中的顶点坐标定义在自己的坐标系中,这样各个Mesh是作为一个整体参与运动的。 动画帧中设置各子Mesh相对于其父Mesh的变换(主要是旋转,当然也可包括移动和缩放),通过子到父,一级级的变换累加(当然从技术上,如果是矩阵操作是累乘)得到该Mesh在整个动画模型所在的坐...
Django 实例 Web Application
Preparing Python Django Html css Javascript Databases HeroKu Materialize Beautiful suite Web scraping Starters! 创建conda环境 conda create --name codedaddies python=3 安装django pip install django 创建工程(指定目录下) django-admin startproject codedaddies_list 创建APP python manage.py startapp my_app 数据库构建 python manage.py makemigrationspython manage.py migrate Templates文件夹 配置在settings中,加入以下: TEMPLATE_DIR = os.path.join(BASE_DIR, “templates”) 底部加入: STATICFILES_DIR = (os.path.join(BASE_DIR, ‘sta...
Django 初步构建
Generic View 简化写法,可选的有generic.IndexView和generic.DetailView DetailView 默认使用 <app name>/<model name>_detail.html.为模板, 可使用template重定向。自动生成model小写名字_list 为名的对象 ListView 默认使用 <app name>/<model name>_list.html 为模板,可使用template重定向。 自动生成model小写名字的context对象
Django 初始测试
使用models.py 创建数据库 注意事项: 1、makemigrations 和 migrate 工作原理分别是什么: makemigrations:根据检测到的模型创建新的迁移。迁移的作用,更多的是将数据库的操作,以文件的形式记录下来,方便以后检查、调用、重做等等。 migrate:使数据库状态与当前模型集和迁移集同步。说白了,就是将对数据库的更改,主要是数据表设计的更改,在数据库中真实执行。例如,新建、修改、删除数据表,新增、修改、删除某数据表内的字段等等。 2、如果不想使用 Django 的 makemigrations 和 migrate 功能,但是不小心执行了这两个命令会发生什么, 首先在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 接着执行migrate的话,这时候会作用到数据库文件,产生对应的表 3、官方解释: 运行 python manage.py makemigrations 为模型的改变生成迁移文件。 运行 python manage.py migrate 来应用数据库迁移。 ...
ECS框架的思考
对比ECSGameEngine框架的问题: 1.Archetype加入的优势 ? 2.Component与Entity不使用类概念的好处? 开发模式的变更(对比ECSGameEngine): 1.System与数据对象之间无组合关系 Unity ECS 读取所有数据方式都一样 A: 在Awake时通过GetComponentGroup 注册需要的component B: 处理时使用group.ToComponentDataArray拿到Entity. 再从Entity取出Component数据 ECSGameEngine: 读取其他数据:需要访问其他的System或某个manager来获取。 A: 新建一个Entity对象,将Component数据预先存到对象里 B: 此System需要某个Entity时,在awake时将Entity实例加入进去,访问其下Component拿数据 ECSGameEngine框架,Component,Entity与System有组合关系,如果有共享Entity数据,这时要么System间相互访问,要么借助另一个公共类将...
ECSSamples研究
FixedTimestepSystemUpdate VirtualMemory SubsceneWithBuildConfigurations








