自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

靖空间

降低成功的时间复杂度,提高生活的空间复杂度

  • 博客(45)
  • 资源 (5)
  • 收藏
  • 关注

翻译 操作系统双语阅读 - Schedulers调度器2

It is important that the long-term scheduler make a careful selection. Ingeneral, most processes can be described as either I/O bound or CPU bound.An I/O-bound process is one that spends more of i

2013-10-31 17:49:58 1374

原创 LeetCode Triangle Bounus达成 动态规划法解法

2014-2-17 update之前分析了那么多,现在不用那么多分析了,高手可以连打带消地处理特殊情况,代码就更加简练了,O(∩_∩)O哈哈~直接给出更加简洁的代码--看,无特殊情况处理,即使triangle是空,还是可以准确地返回答案:除了画图分析之外,还要做到“心中有剑”,写出更加简练的代码。

2013-10-31 11:09:01 1921

原创 关键帧和动画

关键帧和动画Keyframes and Animation关键帧就是预先记录各个级别的动画数据。前面的机械手和太阳系系统都是在运行的时候计算出动画的。关键帧就是一个对于模型各级别在某个时刻的重要位置。比如关键转完处,动作变向处等。通过一定算法,计算机能自动计算出其关键帧之间的动作位置。这样我们就能产生平滑的动画了。如果做过flash和photoshop的朋友都知道这个概念。但是

2013-10-31 08:29:52 2042

翻译 操作系统双语阅读 - Schedulers调度器

These processes are spooled to a mass-storage device (typically a disk), where they are kept for later execution.这些进程存储在进程池中,进程池存放在大容量存储器中,如磁盘,以便后续的载入运行。The long-term scheduler, or job scheduler

2013-10-30 14:36:34 1528

原创 LeetCode Linked List Cycle 解答程序

Linked List Cycle Given a linked list, determine if it has a cycle in it.Follow up:Can you solve it without using extra space?错误解法。因为Cycle可能出现在Link的中间的,所以需要检查其中间Nodes。bool hasCycle(ListN

2013-10-30 10:44:32 1978

原创 DirectX如何构建一个太阳系

基本上都是之前学过的知识,要运用好!总结运用的知识有:1 物体移位选择(transformation)2 树形数据结构管理整个场景的信息3 根据时间控制恒星旋转效果图片如下:首先设置太阳系各恒星的数据结构 枚举太阳,恒星和月亮三个对象类// We classify the objects in our scene as one of three types.enum SolarType

2013-10-30 07:57:00 3497

原创 Direct3D中模拟机械手动作

人的动作是如何实现的呢?这就要用到分级网格(mesh)的知识了。所谓分级也属于场景管理的基本知识,就是把不同模型分级管理,比如人的手臂是一级,作为父母级,然后前臂是下一级,手掌又是一级,这样分开,以达到模拟人手动作的效果。如下:         相当于一个机械手,以各个节点为分界,分级。跟一般的变形(transformation)差不多,只不过世界坐标作为root坐标,由r

2013-10-29 19:18:06 2603

原创 LeetCode Reverse Integer 带考虑第二种特殊情况

Reverse Integer Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321click to show spoilers.Have you thought about this?Here are some good questions t

2013-10-29 13:53:36 1567

原创 C++ 指针 多维数组传递参数

数组作为函数参数,其实就是把其第一个元素地址传递给函数。而多维数组一般都非常困惑我们,解决好多维数组参数传递也有多种实现方法,但是我觉得还是以The C++ Programming Language这本书为标准,看看如何做吧。C++之父的建议就是不要使用数组传递参数,而是把数组用类包起来,使用STL如:array, string,vector等。如果坚持要直接使用一般数组的话,会要应付各种

2013-10-29 08:44:26 3292 1

翻译 操作系统双语阅读 - PCB数据结构

the PCB is expanded to include information for each thread.PCB(进程控制块)被扩展为线程存储信息。PROCESS REPRESENTATION IN LINUX进程在Linux中的表示The process control block in the Linux operating system is represente

2013-10-28 19:08:33 2325 1

原创 LeetCode Merge K Sorted Lists 问题和解答程序 C++ priority queue实现方法

到了现在这种题居然变得这么简单了,实现第二种方法感觉就像势如破竹,一下子通过了。这种经典的合并程序,基本上可以一口气写出来了,还可以任意变换。以前是不敢想象。不过这个跟某些网上的所谓达到盲打有点不一样。我觉得这样的水平不是死背出来的,而是通过做题,然后熟悉基本方法和操作达到的。

2013-10-28 15:39:56 3230

原创 游戏碰撞检测 AABB包围体 sphere 圆形包围体计算

包围体Bounding Volumes有时候我们想要计算一个mesh模型的Bounding Volume。一般使用圆形和AABB。如下图,左边AABB,右边圆形:  圆形是由它的圆心和半径确定其位置,AABB是有其最小和最大顶点确定位置。 使用包围体的原因是可以只测试一个图形就确定这个包围体里面的所有meshes的碰撞状态。如果希望更加准确的碰撞,那么就可以测试到包围体重合

2013-10-28 09:17:07 3318

原创 DirectX 操作.X格式文件总结

Loading an .X File导入.X格式的文件这个是微软格式的模型文件。存储各种任务,树木,花草等模型信息的文件,可以导入并显示与程序屏幕中,导入函数:HRESULT D3DXLoadMeshFromX( LPCSTR pFilename, DWORD Options, LPDIRECT3DDEVICE9 pDevice, LPD

2013-10-27 22:24:21 4560

原创 LeetCode Rotate List 分析解答

看了很多热心人的推荐,觉得LeetCode应该也是个不错的练习算法的地方。问题:Given a list, rotate the list to the right by k places, where k is non-negative.For example:Given 1->2->3->4->5->NULL and k = 2,return 4->5->1->2->3->

2013-10-27 10:36:32 1882

原创 C++ inline constexpr 内联函数和常量表达式函数问题

函数问题一)inline: 内联函数,就是相当于把被调用的函数硬嵌入调用它的函数中去,不用保存栈,所以速度快。1. 要使inline起作用,必须是inline函数定义(不但是声明)在其调用函数范围内2. 不同头文件包含相同inline函数,不是重定义,但是两个或多个inline函数必须一模一样。二)constexpr:如果参数是常量,就可以了在编译时计算的函数。 定义一个con

2013-10-27 08:42:04 4367

原创 图形学 Direct3D中手动创建3D模型

手动写一个模型是非常麻烦的,这就是为什么需要美工来做3D模型,美工利用各种可视化的软件如:3DSmax, maya, Blender等等,那样方便做出各种3d模型。如果手工设置,直接编程出来的话,工作量会相当大,甚至不一定能做出我们想要的模型,但是理论上这是可能的,所以我们看看如何做。属性表当模型的mesh被优化,那么它会如下排序:属性表就是一个D3DXATTRIBUTERANGE

2013-10-26 19:55:58 2011

原创 图形学 Direct3D的3D模型处理2 - 邻接三角形的信息及优化

邻接三角形信息对于某些的模型操作mesh operations),例如优化,需要知道三角形的邻接信息。Mesh的adjacency array存储着这样的信息。ajacency array是一个DWORD数组。每个元素存储一个索引,表示一个mesh中的三角形。例如下标为i的就表示第i个三角形,可以通过计算得到三角形顶点索引信息:A = i · 3B = i · 3 + 1C =

2013-10-26 18:53:53 2128

翻译 双语阅读笔记 - 操作系统 - Process Control Block

It is important to realize that only one process can be running on any processor at any instant.要记住每一时刻一个处理器只能有一个进程运行。Process Control Block 进程控制块Each process is represented in the operating syst

2013-10-26 15:42:47 4033

原创 DirectX的Vertex Buffer顶点缓冲的理解和应用 Shader必知必会

故名思义Vertex Buffer就是存放顶点的缓冲。相当于一个内存区,指明了这些几何图形的顶点的位置。一般简单的几何图形,如正方形,手动地可以定义这些顶点,定义好顶点之后,就需要如下这样来设置好,才能开始画图,而这正是DirectX里面最难理解的问题之一,和OpenGL也一样,同样需要这样设置的,OpenGL SuperBibl 第五版中居然把这个问题放到了差不多最后一个章节去介绍,可想而知

2013-10-26 07:50:39 3943

原创 DirectX中如何分屏显示

有人认为这个很难做,其实在DirectX中是很方便做到的,就是利用视图转换技术(Viewport Transform)视图其实就可以想象成一个镜头口,对着什么地方,就能显示什么地方的东西。而3D图形里面可以说是后台缓冲(back buffer)的所见的内容。一般游戏都是把视图窗口布满整个back buffer的,但是我们可以把back buffer分隔开,以前的三国无双是可以分上下屏,让两个玩

2013-10-25 18:30:19 2819

原创 算法导论Problem6-3 Youngtableau问题 堆排序应用

这道题大概就是要实现一个数组,这个数组中行所有元素都有序,列所有元素都有序。其实这也是应用堆排序的思想,就是把这个数组的看做是二叉树组成的。一个元素的下面一行的对应一个元素是它的左孩子,右边一个元素是它的右孩子。这样就可以应用堆排序来解决这个问题了。同时也是像堆排序一样,实际使用一维数组存储数据,人为规定(按照堆排序的规则,这个是关键思维)地构造二维数组来存储二叉树。详细程序如下:

2013-10-25 14:17:51 1347

翻译 操作系统双语阅读笔记 - Process

操作系统概念 Openrating system concepts是本非常好的书,解析的非常透彻,而且感觉是同样的概念它也讲了别的书没有讲的东西。本系列贴出重点句子,并加以翻译,本翻译把意译和直译结合起来,少数地方会增加注解,按情况来使用,因为思维习惯和表达方式的不一样,我认为这么专业的东西,不能都用直译,否则会显得不伦不类,甚至词不达意的,这也是很多计算机翻译书的通病。难以表达的句子还是真真

2013-10-25 10:02:33 1664

原创 图形学 Direct3D的3D模型处理1

下面大部分内容来自DirectX龙书,整理了一下,模型格式其实也是一些格式化的文档,保存了定点,单位向量,材质坐标等信息。这里主要讲怎么在DirectX里面怎么操作。Mesh由几何图形组成,一般是由三角形组成。Direct3D的.x的3d模型文件就是由三角形组成的。保存模型数据用ID3DXMesh,是有ID3DXBaseMesh集成而来的。ID3DXBaseMesh 接口包括了顶点缓冲(vertex buffer)存储Mesh的顶点,和索引缓冲(index buffer)用来定义顶点的渲染顺序,

2013-10-24 18:48:22 1930

原创 d-ary heaps 多叉树堆排序C++实现

之前实现了堆排序,那是构造二叉树来实现堆排序的,但是其实二叉树还可以用大于等于二叉树来实现的,就是例如3叉树每个节点有三个孩子,4叉树,每个节点有四个孩子,等等。这个是算法导论的一道Problem,其实该注意的地方和堆排序是一样的,所以有了二叉树堆排序的基础之后就很好实现多叉树了。下面是C++程序:#include#includeusing namespace std;int

2013-10-24 13:01:45 3217

原创 图形学 - 多层纹理技术的底层原理

多层纹理技术就是可以把多个纹理都贴在一个几何图形上,形成一个新的纹理。刚接触这个技术肯定不好懂,但是我们剖析其基本的底层原理就是:每一个纹理就是一张图片,每一张图片就相当于很多像素组合起来的文件,一般每个像素也是由32位组成的,所以把这些像素和不同像素的值“加”起来就可以形成新的像素了。如下图,是龙书书本上的图,但是读者不一定能看懂这个图的意思, 书本上的分析好像也不好懂,也许是偏于数学化

2013-10-23 14:35:11 1633

原创 堆排序的应用 Priority queues 优先级排序

堆排序很多时候的实际应用并不如快速排序(quick sort)那么快,但是也有很多实际的应用,例如优先级排序就是其中之一。优先级排序可以应用到系统的调度算法中,人工智能中也经常要用到,熟悉这个算法很有好处。下面给出利用堆操作构建优先级排序的基本算法:#include#include#include"heapSort.h"//包含了堆排序的操作,可以参照我博客的堆排序using

2013-10-23 11:05:01 1715

原创 Alpha Test 透明通道测试技术做篱笆效果图

Alpha test是可以通过测试然后丢弃不需要渲染的像素的。顾名思义就是根据他的alpha值与某特定值比较。这个技术做腐蚀效果,某些电影特技如:可以让一个人慢慢各个部位褪色,最后消失……等,而且不需要消耗什么计算时间。计算公式:IF as (Openration function) ref == true THENaccept pixel ELSE reject pixel

2013-10-22 19:44:50 2702

原创 TCPL C++资源管理简述

The C++ Programming Language 第五章5.2总结资源管理对于大型程序来说非常重要。内存泄漏轻则导致性能下降,严重则会引起程序崩溃等问题。C++的机制主要是constructor/destructor;下面是一个标准库lock类的用法:mutex m; // used to protect access to shared data// ...voi

2013-10-22 14:56:42 940

原创 Shader Effects 一些着色器的额外功能

Shader渐渐成为主流了,然而大多数公司我估计还是在使用普通的固定管道的功能吧,本文就总结一些用Shader能做,而用固定渲染管道不能做的功能,让大家看看shader的魅力。1. 丢弃像素这个是固定渲染管道所没有的功能,当然非要用固定渲染管道做差不多同样的效果是差不多可以的,就直接吧alpha值设计为0.但是之所以我说差不多,是因为用shader做的这个功能更加强大,shader是可以直

2013-10-22 13:40:28 1429

原创 棋盘覆盖问题 C++实现11

本算法,简单概述就是利用L型的骨牌,填充2^k*2^k的方形棋盘。其中棋盘用2维数组表示,这里用vector<vector<int> > board表示。我发现关于本算法,百度百科的说明和《算法设计与分析》这本书是一样的,错的地方还是一样的错。到底出处是哪里?是谁抄谁的还是都是抄别人的,那就不得而知了。本博客不会这样照搬复述的,本博客的文章都是自己的理解总结出来,和自己思考所得的结论,最多包含某些书本的精要概括,绝对原创,要引用本博客内容的朋友请注明出处。这里就指出重点和难点加以分析。并改正其

2013-10-22 12:27:12 2985

原创 最大字段和问题 难点分析和C++实现9

给定n个数组成的序列,求其中最大子段和,并规定其中如果所有数均为负值的时候,那么最大字段和为零。解决这样的问题需要用的算法是:分治法基本思路:1. 划分两个长度基本相同的子段,得出以下三种情况2. 如果最大和出现在左边,就左边最大子段和为解3. 如果最大和出现在右边,就右边最大子段和为解4. 如果是最大和在左子段的最右边的数组成,和右子段的最左边的数组成,那么就合并这两个子

2013-10-21 13:10:59 1649

原创 TCPL C++迭代器的用法 用作参数传递 读写文件

C++数据流迭代器(iterators)一般不直接使用,而是用做某些算法的参数。这些算法多是STL中的算法,是用C习惯了的朋友,应该会觉得这个有点不需太习惯,但是这就是C++的方法,据C++之父Bejarne的说法就是代码要elegant(优雅)!多使用数据流,并熟悉这个概念的话,我觉得还是挺好的概念的。例如下面是一个简单的程序:int main(){ string from,

2013-10-21 08:57:53 4010

原创 平面阴影技术 DirectX例子 图形学2

平面阴影虽然不能满足所有的阴影要求,但是如果是相对简单的场景的话,用平面阴影也是个不错的选择,它的优点是速度快,并不需占用多少运算时间。步骤如下:1. 定位需要渲染阴影的物体,和阴影所在平面2. 计算出平面上阴影的物体定点,定义一定透明度,如50%透明度3. 渲染一、首先解决问题是如何计算方法就是利用向量代数和空间解析几何的知识,知道了光照的方向向量,物体定点,和平面位置,

2013-10-20 21:12:48 2397

原创 算法数据结构C++实现8 堆排序 难点分析

算法导论第六章开始就开始介绍堆排序了。这是个非常难理解的排序算法,主要需要经过三个步骤:1 大顶堆化; 2 利用大顶堆化函数简历大顶堆; 3 最后徐在利用前面两个函数进行排序这个算法有几个理解难点需要克服的:1. 计算堆中的孩子节点要仔细,因为堆排序用的是一位数组表示二维二叉树的概念的,这都是人为地把数值中的元素和二叉树的一个节点一个节点地第一对应起来的,所以要程序员自己计算好这些对应

2013-10-20 15:27:58 1624

原创 TCPL - C++迭代器的用法 - 操作数组和数据流

1. 遍历数组最简单的也是最常用的就是遍历访问一个数组了,如检查一个字符串里面是否含有某个字符:

2013-10-20 09:05:00 3219

原创 Stenciling技术实现镜子效果 图形学1

本人花时间整理的渲染镜子的技术,有需要的朋友可以参照一下。出处。http://blog.csdn.net/kenden23简介:模板缓冲(The stencil buffer)(或者翻译为蒙蔽层缓冲吧)属于是一个后台缓冲,不过它跟back buffer不一样,它主要用来完成一些特效。比如:镜子效果,阴影效果等。它的缓冲大小是和一般的后台缓冲(back buffer)和深度缓冲(de

2013-10-19 14:53:44 2673

原创 算法数据结构C++实现7 - 同时查找最大值和最小值优化算法

算法导论第九章开始的算法 同时查找最大值和最小值的算法。本算法并不是直接拿数组中的元素来和最大值和最小值比较的,而是先比较数组中两个数组,然后那其中小的和最小值对比,其中大的和最大值对比,那么算法就可以由原来需要对比2n次,降到只需要对比3n/2次了。对于一个无序查找最小值的算法一般都如下:templateT minimum(vector& vt){ T min = vt[0];

2013-10-19 10:43:51 4401 3

原创 算法数据结构C++实现6 - 行排序 列排序 Column sort

Introduction to Algorithm 算法导论第八章的Column sort是非常有趣的,相当复杂。要用C++是实现起来是很困难的,因为需要用到几大块的小算法,才能实现。第一是行间排序,第二是行列变换,第三是前后移动元素,这些算法都组合起来,整个过程就变得很复杂了。这次我是用二维数组来实现的,也可以用vector实现同样的效果,感觉能用vector还是用vector吧。而

2013-10-18 16:43:42 2069

原创 算法数据结构C++ - Bucket Sort 吊桶排序

吊桶排序的排序速度很快,平均是O(n),能达到这么快的速度其中一个原因是它假设了输入值为范围是[0, 1)的小数。Introduction to Algorithm这本书里面章8.4的算法,首先把原数组按照一定规律对照到每个吊桶(Bucket)里面,然后对每个Bucket排序,最后把这些Bucket串起来,就成为一个有序序列了。下面是C++完整代码:#include#include

2013-10-16 15:29:13 2393

原创 算法数据结构C++实现4-计数排序(counting sort)

这里是 Introduction to Algorithm 算法导论书中第八章的计数排序 counting sort, 本专题还是以这本书为主,用c++实现其中最重要的算法。网上也有很多高手研究了这本书,给出了读书摘要; 本专题的特色就是直接给出程序实现;这本书的算法还是非常简明易懂的,就是算法分析和一些数学问题会比较难,这些内容还是需要有时间自己慢慢研究的,不过有些比较深入的内容的话,工

2013-10-08 16:08:31 2501

OpenGL完美的心形

可以参考本人博客: http://blog.csdn.net/kenden23/article/details/27338943 是一个使用OpenGL FreeGlut画的一个完美的心形。

2014-05-28

简单Windows弹球程序

详细描述,请看下面博客: http://blog.csdn.net/kenden23/article/details/17268877

2013-12-14

第一人称3D镜头框架代码

http://blog.csdn.net/kenden23/article/details/14051187 这个博客讲解的代码框架。讲解的类部分另外下载,可在博客上找。

2013-11-02

第一人称3D镜头类

http://blog.csdn.net/kenden23/article/details/14051187 这个博客讲解的代码,可以实现一个3d漫游第一人称视觉的类。一个镜头类,可以控制3D视觉,实现漫游效果

2013-11-02

算法问题集合源文件 堆排序 吊桶排序 最大子段和等

这个是本博客算法专栏的部分.cpp源文件,方便大家打包下载,如果没有积分的话,可以到我博客粘贴,博客有完整的代码。 http://blog.csdn.net/column/details/billsalgorithm.html?page=1#12944927 这里是部分源文件,暂时没时间全部做好。 可以直接加入项目运行的,建议使用vs2012编译。

2013-10-22

空空如也

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

TA关注的人

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