自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 收藏
  • 关注

转载 简单工厂模式

一、动机  一个渲染器应用程序中存在着多种不同的相机(如透视相机、鱼眼相机等)。通过应用程序的图形界面,用户可以选择使用不同的相机来生成光线,对场景进行渲染。渲染程序如代码列表1所示。在代码中,我们使用字符串来表示相机类型,并使用if-else语句(6~10行代码)来实例化相应的Camera子类对象。然而,这种方式会存在着一些问题。首先,如果我们需要增加一个新的相机类型,或者删除一...

2017-09-21 19:51:00 198

转载 粒子系统—雪景模拟

1. 粒子系统粒子系统是用来模拟微小粒子的物理学模型,一般用于火焰、爆炸等由微小粒子组成的物理现象的模拟。一般而言,粒子系统由大量具有颜色、位置、速度等特征的粒子组成。通常用于游戏中的特效或者雨雪、火焰等模拟。2.粒子的属性:位置速度颜色声明周期重力一般而言粒子具有以上的属性,但是可以根据具体的情况来增加或者减少一些属性,还可以给粒子加上其他物理特性,如可以让落在地面...

2016-05-29 14:35:00 843

转载 光线追踪算法—图像纹理

1. 纹理的概念由于一个物体表面的不同位置上通常有含有不同的颜色或者其他属性(如发射率、法线等),所以需要一种方法来表示物体每个位置上的不同的属性。在CG中,通常通过使用纹理映射技术来表示物体不同位置上不同的属性。由于物体可以是一维、二维或者三维的,所有纹理技术可以适用于1D、2D与3D空间。通常来说,纹理映射技术可以通过两种方法来实现,一种是将物体的属性存储在一个二维数组中,该数组...

2016-05-26 19:50:00 576

转载 适配器模式—STL中的适配器模式分析

适配器模式通常用于将一个类的接口转换为客户需要的另外一个接口,通过使用Adapter模式能够使得原本接口不兼容而不能一起工作的类可以一起工作。这里将通过分析c++的标准模板库(STL)中的适配器来学习adapter模式。由于STL中的适配器过多,不可能全部都具体介绍,所有这里将简单介绍STL中存在的适配器,但将通过具体分析STL中istream_iterator适配器来分析adapte...

2016-05-12 18:25:00 337

转载 光线追踪算法-过程纹理

1. 过程纹理的概念过程纹理通过编写代码来生成相应的颜色值,而不是从图像中获取颜色值。相比较从图像中获取颜色而言,过程纹理的优点是可以对空间中的任意一点定义纹理,并且不需要额外的存储空间来存储图像。通常某些具有数学表达式的图像可以很好地通过过程纹理来实现。过程纹理计算空间中某个点的纹理时可能需要花费更多的时间,从图像获取只需要直接获取即可。2. 3D棋盘过程纹理3D棋盘过程纹理可...

2016-05-08 00:15:00 280

转载 光线追踪算法—镜面反射

1.镜面-镜面光线传输计算只涉及主光线计算而渲染出来的图像无法真实表现现实中的光线照射,通过增加能够反射光线的材质,进行空间中具有反射材质的对象之间的反射光线的追踪,可以更好地体现真实感。2.光线镜面反射的计算当光线与包含反射材质的物体进行碰撞后,计算反射方向,追踪计算得到的反射光线即可,因为光线可能在空间中无限的反射下去,为了避免这种情况,一般定义一个最大的追踪深度。根据反射光...

2016-04-30 22:45:00 1838

转载 光线追踪算法—阴影绘制

1.阴影的作用阴影效果在真实感图像生成中提供给图像更多的真实感,并且能够为场景提供某些定性分析,如光照的位置、光照的范围等信息。阴影可以看为光源看不到的地方,即从光源往各个方向发送光线,则光线无法照射到的区域则为阴影。在光线追踪中,从观察光线与物体的碰撞点向光源引一条光线,光线方向指向光源,若该光线在到达光源之前碰撞到某些物体,则该点位于阴影中。2.阴影的生成实现阴影的生成如...

2016-04-28 23:27:00 3651

转载 实区域种子填充算法

本文给出三个实区域填充算法的c++实现。三个填充算法分别为边界填充算法、泛洪填充算法、扫描线种子填充算法,相关的理论与算法描述这里不涉及。边界填充算法st int direction[] = { 1, 0, -1, 0, 0, 1, 0, -1, 1, 1, 1, -1, -1, 1, -1, -1 };void BoundaryFill4(HDC hdc, int x, in...

2016-04-19 15:22:00 442

转载 leetcode 290 Word Pattern

题目链接:https://leetcode.com/problems/word-pattern/思路分析:题目要求判断在pattern中的字符与str中的非空word之间是否存在双射,解法如代码所示。循环不变量:当 I = k 时,并进行迭代时,pattern[0..i-1]与strings[0..i-1]之间满足双射关系循环不变量证明:1> 初始化:当 I ...

2016-03-24 00:12:00 124

转载 leetcode 328 Odd Even Linked List

题目链接:https://leetcode.com/problems/odd-even-linked-list/思路分析:题目为链表操作题,比较容易。需要特别注意的是对于特殊情况的处理,如当链表为空或者链表的长度为1时,不存在第偶数个结点组成的链表。代码如下:# Definition for singly-linked list.# class ListNode...

2016-03-23 22:46:00 113

转载 leetcode 237 Delete Node in a Linked List

题目链接:https://leetcode.com/problems/delete-node-in-a-linked-list/思路分析:题目要求在链表中删除给定的node,该node不为链表中的tail。因为没有node的前一个结点,所以想要直接从linked list中直接删除结点node是不可能的。根据题目信息,可以通过将node.next结点的值赋给node,并删除nod...

2016-03-23 22:12:00 134

转载 集合的子集构造算法

Scheme实现:(define (subsets s) (define nil '()) (if (null? s) (list nil) (let ((rest (subsets (cdr s)))) (append rest (map (lambda (items) ...

2015-12-09 13:25:00 419

转载 poj 1684 Lazy Math Instructor(字符串)

题目链接:http://poj.org/problem?id=1686思路分析:该问题为表达式求值问题,对于字母使用浮点数替换即可,因为输入中的数字只能是单个digit。代码如下:#include <iostream>#include <cstring>#include <cstdio>#include <cma...

2015-11-16 23:53:00 122

转载 STL内存配置器

一、STL内存配置器的总体设计结构1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时,使用第一级配置器,否则使用第二级配置器;对于小块的内存的分配使用第二级配置器使用分配与释放内存块的效率更高,时间复杂度为O(1);2.两级配置器的优点:(1)使用两级配置器主要是为了避免太多的小块的内存申...

2015-09-11 18:00:00 191

转载 迭代器(iterators)

1.迭代器的概念迭代器是一种抽象的设计概念。在设计模式中,迭代器模式定义为:提供一种方法,使之能够依序访问某个容器中所含的各个元素,而又无需暴露该容器的内部组织结构。迭代器可以看做一种行为类似指针的对象,迭代器和指针一样都具有解引用和成员访问的功能。2.迭代器的相关类型通常在使用迭代器时需要使用迭代器所指的对象的类型或者迭代器所指对象的类型的指针类型或者引用类型等,...

2015-09-08 21:12:00 141

转载 类型萃取(type traits)

1. 类型萃取的作用类型萃取使用模板技术来萃取类型(包含自定义类型和内置类型)的某些特性,用以判断该类型是否含有某些特性,从而在泛型算法中来对该类型进行特殊的处理用来提高效率或者其他。例如:在STL中的destory算法根据函数的参数类型的特性:是否有trivial destructor来选择对应的策略来进行destory,如果为内置类型,则不调用该类型的destructor,否则对...

2015-09-08 13:16:00 135

转载 hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包+dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191思路分析:该问题为多重背包问题;假设状态dp[i][v]表示在前i件物品中选择物品放入大小为v的背包的最大的重量,则可以第i件物品可以选择0~n[i]件,所以可以得出状态方程 dp[i][v] = Max{dp[i-1][v – k * c[i]] + k * w[i]}, 0 &l...

2015-07-31 11:23:00 112

转载 hdoj 1114 Piggy-Bank(完全背包+dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114思路分析:该问题要求为多重背包问题,使用多重背包的解法即可;假设dp[v]表示容量为v的背包中能够装下的最少的价值,因为一件物品可以装无限数次,所以可以得到递推公式: dp[v] = Min(dp[v], dp[v- c[i]] + w[i]);代码如下:impor...

2015-07-31 10:25:00 139

转载 hdoj 2546 饭卡(0-1背包)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546思路分析:该问题为0-1背包问题的变形题;问题求余额最少,设开始的余额为V,则求得用V-5可以买到的菜的最大价值,最后留下的5元则用来买菜价最高的菜,可以证明这种购买方式是能够产生最优解的;另外,因为题目要求所有的菜只能买一次,所以在求V-5能买最多价值的菜时不能买菜价最高的菜,因为...

2015-07-29 21:58:00 136

转载 hdoj 2620 Bone Collector(0-1背包)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602思路分析:该问题为经典的0-1背包问题;假设状态dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值,则可以推导出dp递推公式dp[i][v] = Max{dp[i-1][v], dp[i-1][v – c[i]] + w[i]};c[i]表示第i件物品的容量...

2015-07-29 19:55:00 104

转载 hdoj 5319 Painter(模拟题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319思路分析:假设颜色R表示为1,颜色B表示为2,颜色G表示为3,因为数据量较小,采用暴力解法即可,即每次扫描对角线,看每条对角线需要画多少笔,统计所有对角线的笔数和即可;代码如下:#include <cstdio>#include <cstrin...

2015-07-28 17:51:00 107

转载 poj 3678 Katu Puzzle(2-SAT)

题目链接:http://poj.org/problem?id=3678思路分析:该问题要求判断是否能给定每一个布尔变量一个值,使布尔变量满足某些逻辑条件;需要根据逻辑条件来进行点与点的连接:假设两个变量为a与b,2 * a表示a的值为0的点,2 * a + 1表示a的值为1的点,则可以根据逻辑条件给出给出连接的边;a AND b == 1 =》 a与b的值必定为1,所以2 *...

2015-07-28 10:33:00 97

转载 poj 3207 Ikki's Story IV - Panda's Trick(2-SAT)

题目链接:http://poj.org/problem?id=3207思路分析:该问题给出N个点,并给出M条连接这些点的线,需要判断是否这些线不会相交;(1)假设两条线A的端点按照圆圈的顺时针方向依次为A0,A1,同理线B为B0, B1,则可以知道当 A0 < B0 < A1 < B1 或者 B0 < A0 < B1 < A1时线A与B如果同时...

2015-07-28 09:32:00 83

转载 hdoj 1824 Let's go home(2-SAT)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1824思路分析:该问题为2-SAT问题;需要注意逻辑推理的等价性;(1)题目第一个条件:每一个队或者队长留下或者其与两名队员同时留下,或者表明只能为两种情况中的一种;假设三人为A,B,C,队长为A,0表示不留下,1表示留下,因为B与C同时留下或者不留下,只要B,C中其中一个没有留下或者...

2015-07-27 21:25:00 74

转载 hdoj 3062 Party(2-SAT)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3062思路分析:将问题转换为2-SAT问题,需要注意的是将命题转换为有向图的方法;命题中A1, A2, C1, C2表示C1与C2不能同时出现,所以A1中C1出现等价于A2中C2 ^ 1出现,同理A2中C2出现等价于A1中C1^1出现,则形成了两条有向边;代码如下:#in...

2015-07-27 18:33:00 93

转载 hdoj 1874 畅通工程续(单源最短路+dijkstra)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874思路分析:该问题给定一个无向图、起始点和终点,要求求出从起始点到终点的最短距离;使用Dijkstra算法求出从起始点到所有的其他点的最短路长度即可,如果最短路长度为INT_MAX,表示从起始点到该点没有路径相连;代码如下:#include <queue&g...

2015-07-26 17:00:00 132

转载 hdoj 2544 最短路(最短路+Dijkstrea算法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544思路分析:该问题给定一个无向图,要求求从起始点到终点的最短路径长度;可以使用dijkstra算法求出该起始点到其他所有点的最短距离;代码如下:#include <queue>#include <climits>#include &lt...

2015-07-26 16:25:00 129

转载 hdoj 1233 还是畅通工程(最小生成树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233思路分析:该问题为最小生成树问题,使用kruskal算法或者prim算法即可解决;代码如下:#include <cstdio>#include <cstring>#include <iostream>#include ...

2015-07-26 12:33:00 155

转载 hdoj 5311 Hidden String(KMP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5311思路分析:该问题要求在字符串中是否存在三个不相交的子串s[l1..r1], s[l2..r2], s[l3..r3]能够拼接成模式串,而且满足要求1≤l1≤r1<l2≤r2<l3≤r3≤n;由于数据较小,可见将模式串拆分为所有的三个不想交的子串的所有可能,再使用KMP...

2015-07-26 00:10:00 108

转载 hdoj 1532 Drainage Ditches(最大网络流)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532思路分析:问题为最大网络流问题,给定一个有向图,需要求解该有向图的最大网络流,使用EdmondsKarp算法求解;需要注意输入的边中可能有重边的存在;代码如下:#include <queue>#include <vector>#i...

2015-07-25 11:58:00 100

转载 hdoj 3549 Flow Problem(最大网络流)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549思路分析:该问题为裸的最大网络流问题,数据量不大,使用EdmondsKarp算法求解即可;需要注意的是该问题的点最多有15个,边的数目最多有1000个,所以该图中存在重边,需要将多个重边合为一条边;代码如下:#include <queue>#incl...

2015-07-25 11:46:00 106

转载 hdoj 1269 迷宫城堡(强连通分量)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269思路分析:该问题要求判断是否每两个房间都可以相互到达,即求该有向图中的所有点是否只构成一个强连通图分量,使用Tarjan算法即可求解;代码如下:#include <stack>#include <vector>#include &lt...

2015-07-24 22:28:00 158

转载 poj 1144 Network(割点)

题目链接: http://poj.org/problem?id=1144思路分析:该问题要求求出无向联通图中的割点数目,使用Tarjan算法即可求出无向联通图中的所有的割点,算法复杂度为O(|V| + |E|);代码如下:#include <cstdio>#include <vector>#include <cstring&gt...

2015-07-24 15:15:00 147

转载 hdoj 3478 Catch(二分图判定+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478思路分析:该问题需要求是否存在某一个时刻,thief可能存在图中没一个点;将该问题转换为图论问题即为判断该图是否为一个连通图且不为二分图;(1)二分图的性质:对于无向图G=(V, E),如果可以将图中的点划分为两个不相交的点集X与Y = V - X(V为点集),使得图中所有的边邻...

2015-07-24 10:36:00 125

转载 poj 1386 Play on Words(有向图欧拉路+并查集)

题目链接:http://poj.org/problem?id=1386思路分析:该问题要求判断单词是否能连接成一条直线,转换为图论问题:将单词的首字母和尾字母看做一个点,每个单词描述了一条从首字母指向尾字母的有向边,则则所有的单词构成了一个有向图,问题变为判断该有向图中是否存在一条欧拉路;有向图中存在欧拉路的两个充分必要条件为:该图是联通的并且所有的点的入度等于出度或者只存在两个...

2015-07-23 22:38:00 132

转载 hdoj 1878 欧拉回路(无向图欧拉回路+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878思路分析:该问题给定一个无向图,要求判断该无向图是否存在欧拉回路;无向图判断存在欧拉回路的两个必要条件:该无向图为连通图且所有的结点的度数为偶数;代码如下:#include <cstdio>#include <cstring>#inc...

2015-07-23 21:53:00 115

转载 hdoj 3018 Ant Trip(无向图欧拉路||一笔画+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018思路分析:题目可以看做一笔画问题,求最少画多少笔可以把所有的边画一次并且只画一次;首先可以求出该无向图中连通图的个数,在每个无向连通图中求出需要画的笔数再相加即为所求。在一个无向连通图中,如果所有的点的度数为偶数则存在一个欧拉回路,则只需要画一笔即可;如果图中存在度数为奇数的...

2015-07-23 21:19:00 132

转载 hdoj 1028 Ignatius and the Princess III(区间dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028思路分析:该问题要求求出某个整数能够被划分为多少个整数之和(如 4 = 2 + 2, 4 = 2 + 1 + 1),且划分的序列 2, 2 或者 2, 1, 1为单调非递增序列;使用动态规划解法:假设dp[i][j]表示整数i被划分的序列中最大值不超过j的所有的可能,则使用类似于...

2015-07-22 17:56:00 132

转载 hdoj 3065 病毒侵袭持续中(AC自动机)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3065思路分析:问题需要模式匹配多个模式串,需要注意的是模式串会包含和重叠,需要对AC自动机的匹配过程进行修改,对于每个节点,需要从该节点的失败指针回溯,如果失败指针回溯后的节点为某个模式串的最后一个节点,则匹配了另一个模式串;代码如下:#include <q...

2015-07-22 00:17:00 114

转载 hdoj 2896 病毒侵袭(AC自动机)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2896思路分析:题目为模式匹配问题,对于一个给定的字符串,判断能匹配多少个模式;该问题需要静态建树,另外需要对AC自动机的模板加以修改,对于每个匹配的模式的最后一个单词的fail指针指向root,即可实现一个字符串进行多次模式匹配;代码如下:#include <...

2015-07-21 23:15:00 137

空空如也

空空如也

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

TA关注的人

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