bv

编译原理DFA(有限确定自动机)的构造

ε祈祈猫儿з 提交于 2020-03-18 06:49:57
CODE: https://github.com/pxjw/Principles-of-Compiler/tree/master/consDFA 原题: 1、自己定义一个简单语言或者一个右线性正规文法 示例如( 仅供参考 ) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e 2、构造其有穷确定自动机,如 3、利用有穷确定自动机M=(K,Σ,f, S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是” K:=S; c:=getchar; while c<>eof do {K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) 开始编程! 1.状态转换式构造类: current——当前状态 next——下一状态 class TransTile { public: char current; char next; char input; TransTile(char C,char I,char Ne){ current = C; next = Ne; input = I; } }; 2.DFA的构造类 此处包括DFA的数据集,字母表,以及过程P的定义。 包括了初始化,遍历转换

Scene Management --- Collision Detection

ぐ巨炮叔叔 提交于 2020-03-05 23:03:23
Scene Management --- Collision Detection 仅供个人学习使用,请勿转载,勿用于任何商业用途。 没有碰撞检测的引擎是不完整的。碰撞检测是引擎的基础服务之一,需要为渲染,物理仿真,AI和游戏逻辑都等众多子系统提供服务。由于碰撞检测本身设计到大量数学运算,以及各个子系统对碰撞检测需求的不同,使得它成了最难实现的部分。 碰撞检测需要解决的问题是物体之间是否发生了碰撞,在什么时刻发生了碰撞,碰撞位置在什么地方以及碰撞点法线的方向,得到的碰撞数据越多,计算量也越大。考虑两个物体碰撞检测的问题,假设每一帧都通过遍历2个物体中的所有三角形来判断是否发生碰撞,那代价一定是相当大的。于是人们用一些简单的,便于处理的几何体近似实际模型,以减少计算量,这就是常说的包围体BV(bounding volume)。常见的包围体有AABB,球体,OBB,Hull等等。包围体减少了碰撞检测的计算量,特别是对于没有相交的物体来说,让他们很快就排除在后续计算之外,也就是常说的early rejection。前面所说的几种包围体,精度逐渐增高,所需计算量也随之增加。可以先计算两个物体初级包围体(比如包围球)是否相交,如果相交,再进一步计算精度高一级的包围体(AABB或者OBB)是否相交,以次类推,直到满意的精度(比如三角形级别)为止,我把这个方法称为BV LOD

点分治

﹥>﹥吖頭↗ 提交于 2020-03-04 15:15:27
poj 1741 include<stdio.h> include using namespace std; define PA pair<int,int> const int N=10005,M=20005; int read() { int s=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){s=(s<<1)+(s<<3)+ch-'0';ch=getchar();} return s*f; } int n,m,ans; int be[N],bn[M],bv[M],bl[M],bw=1; int siz[M]; void put(int u,int v,int l) {bw++;bn[bw]=be[u];be[u]=bw;bv[bw]=v;bl[bw]=l;} int dfs(int e) { if(siz[e])return siz[e]; for(int i=be[bv[e]];i;i=bn[i]) if((i^e^1)&&bv[i]) siz[e]+=dfs(i); siz[e]++; return siz[e]; } int q[N],q0[N]; void dfs2(int x,int dis,int fa,int

编译原理DFA(有限确定自动机)的构造

﹥>﹥吖頭↗ 提交于 2020-01-05 01:37:58
CODE: https://github.com/pxjw/Principles-of-Compiler/tree/master/consDFA 原题: 1、自己定义一个简单语言或者一个右线性正规文法 示例如( 仅供参考 ) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e 2、构造其有穷确定自动机,如 3、利用有穷确定自动机M=(K,Σ,f, S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是” K:=S; c:=getchar; while c<>eof do {K:=f(K,c); c:=getchar; }; if K is in Z then return (‘yes’) else return (‘no’) 开始编程! 1.状态转换式构造类: current——当前状态 next——下一状态 class TransTile { public: char current; char next; char input; TransTile(char C,char I,char Ne){ current = C; next = Ne; input = I; } }; 2.DFA的构造类 此处包括DFA的数据集,字母表,以及过程P的定义。 包括了初始化,遍历转换

分析碰撞检测库Opcode

ぐ巨炮叔叔 提交于 2020-01-01 22:06:19
一.概述 Opcode 是一个开源的碰撞检测库,其最大的特点是占用内存少(与其他的碰撞检测库相比而言),对一个完全二叉树中的每个三角形仅用 20 字节,所以它的文档中说是“ Memory-optimized bounding-volume hierarchies ”。 在碰撞检测中,利用检测树( Bounding-volume hierachies )结构进行碰撞排除是最普遍的方法(如 RAPID , SOLID , QuickCD,PQP 都是如此), Opcode 也不例外, Opcode 中默认的包围盒是 AABB 。就是说若用 Opcode 进行一个 Mesh 的碰撞检测,则它会为此 Mesh 建立 AABB 树。 Opcode 可以对以下情况作出检测: - Mesh-mesh - Sphere-mesh - Ray-mesh - AABB-mesh - OBB-mesh - Planes-mesh 二.检测过程 调用 Opcode 的代码做检测时主要包含三部分: 1. 为 Mesh 生成碰撞树 这涉及到 Opcode 中的 Model 类和 OPCODECREATE 类, Opcode 建立碰撞树分两步:首先建立一般的树(这个树最后被遗弃),然后利用一般的树建立一个优化的树。 Opcode 可以建立的四种树(关于这几种树在后面的内存优化部分会讲到): - Normal

通过hijack了解bio

匿名 (未验证) 提交于 2019-12-02 23:42:01
通过hijack了解bio 背景 bio是block io,它是一个描述硬盘里面的位置与page cache的页对应关系的数据结构,每个bio对应的 硬盘里面一块连续的位置,每一块硬盘里面连续的位置,可能对应着page cache的多页,或者一页, 所以它里面会有一个 bio_vec *bi_io_vec 的表。 而每个bio_vec都只能描述一个页内数据的连续的数据的偏移和长度: 通过bi_sectors和bi_size来描述硬盘中起始位置和长度。 一个bio的处理:一个bio通常通过 submit_bio 来提交给设备队列,下面会经过bio聚合,转化成request,磁盘调度队列,块设备驱动,磁盘处理,对于bio来说大部分都是异步,所以处理结束通过 bio->bi_end_io 来作为callback获取结果,外部的接口使用bio_endio。同步的读写是通过等待callback事件到来从而完成同步读写。 中间贴的只是代码片段,介绍怎么做的,不能直接运行的。获取全部的代码片段,请联系我 目标 进行块设备加密,磁盘落盘的数据是密文,而对于文件系统来说是明文.加密算法因为用过sm4,所以就选用了最简单的 sm4(ecb) 加解密。 设计 submit_bio是写IO的起手势,所以通过hook submit_bio来进行写加密,保证提交给下面的数据是经过加密的就好了