排序是数据结构体系中最重要的内容之一,这一块必须要非常熟练的掌握,应该做到可以立马写出每个排序的代码,有多种实现方法的必须多种都能很快写出来,当然对各个排序的性能的了解也是基础且重要的。我们先对排序这一块进行一个整体的把握。
数据挖掘通常与计算机科学有关,并通过统计、在线分析处理、情报检索、机器学习、专家系统(依靠过去的经验法则)和模式识别等诸多方法来实现上述目标。
因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 问题: 你怎样才能在不直接操作对象
第十五课中已经学习了如何创建光照贴图。光照贴图可用于静态对象的光照,其阴影效果也很不错,但无法处理运动的对象。 阴影贴图是目前(截止2012年)最好的生成动态阴影的方法。此法最大的优点是易于实现,缺点是想完全正确地实现不大容易。 本课首先介绍基本算法,探究其缺陷,然后实现一些优化。由于撰写本文时(2012),阴影贴图技术还在被广泛地研究;我们将提供一些指导,以便你根据自身需要,进一步改善你的阴影贴
简介 这堂课是视频课程,没有介绍新的OpenGL相关技术/语法。不过,大家会学习如何利用现有知识,生成高质量的阴影。 本课介绍了用Blender创建简单场景的方法;还介绍了如何烘培(bake)光照贴图(lightmap),以便在你的项目中使用。 无需Blender预备知识,我会讲解包括快捷键的所有内容 关于光照贴图 光照图是永久、一次性地烘焙好的。也就是说光照图是完全静态的,你不能在运行时移动光源
本章我们将会学习如何在3D游戏中制作户外场景,包括天空、海洋、地形等。 天空 3D游戏中的天空有很多实现方法,总的来说,皆是障眼法。最简单的手法不过是改变画面的背景色,让玩家“感觉”到天色的变化。 如果在玩家头顶上放置一个平面,再把云朵、太阳、星星、月亮等图片“贴”上去,就可以混合成类似下面的效果。 这种技术称为**“天空面(SkyPlane)”**。 显然,这种方法是很容易露馅的。当玩家的视野足
物理引擎概述 物理引擎是一种用于模拟真实物理现象的中间件,可以用来创建虚拟的物理环境,并在其中运行来自物理世界的规则。物理引擎应用的最多的地方就是动画和游戏行业,例如3D游戏开发常用的三大物理引擎: Havok PhysX Bullet Havok引擎的授权则比较昂贵和严格,光环4、上古卷轴5等游戏大作使用的都是这款引擎。PhysX虽然现在不开源,但也实行免费推广政策,是Unity3D、CryEn
碰撞与相交 碰撞检测这个词通常有两种含义,一种是物理意义上的碰撞检测,另一种是数学意义上的碰撞检测。本章讨论的是纯数学的碰撞检测,即判断物体之间是否相交(或包含、重合)、计算交点、预测相交时刻等。“物理引擎”则是在碰撞检测的基础上又增加了“物理”因素,模拟力与力之间的相互作用,这个内容将在下一章讨论。 显而易见,数学碰撞检测比物理碰撞检测的速度要快,而且消耗的内存也更少,因为压根就不用考虑质量、能
虽然我们已经在使用部分 Python 面向对象的特性,前两个章节中的程序并不是真正面向对象的, 因为它们没有呈现出程序员自定义类型与对其进行操作的函数(functions)之间的关系。 下一步,我们将会把这些函数转换成明显突出这一关系的方法(methods)。 本章代码可以从http://thinkpython2.com/code/Time2.py 获取, 练习题的答案位于http://think
现在我们已经知道如何去定义一个新的类型,下一步就是编写以自定义对象为参数的函数,并返回自定义对象作为结果。在本章中,我还将介绍“函数式编程风格”和两种新的编程开发方案。 本章的代码示例可以从 http://thinkpython2.com/code/Time1.py 下载。练习的答案可以从 http://thinkpython2.com/code/Time1_soln.py 下载。 时间 再举一个
目前你已经知道如何使用函数来组织你的代码,同时用内置的类型来管理数据。 下一步我们将学习“面向对象编程”,即使用 程序员定义的类来组织代码和数据。 面向对象编程是一个很大的话题,讲完需要一些章节。 本章的示例代码可以在http://thinkpython2.com/code/Point1.py 获取; 练习题的答案可以在http://thinkpython2.com/code/Point1_sol
麦卡锡的非确定运算符amb几乎和Lisp一样古老,尽管现在它已经从Lisp中消失了。amb接受一个或多个表达式,并在它们中进行一次“非确定”(或者叫“模糊”)选择,这个选择会让程序趋向于有意义。现在我们来探索一下Scheme内置的amb过程,该过程会对模糊的选项进行深度优先选择,并使用Scheme的控制操作符call/cc来回溯其他的选项。结果是一个优雅的回溯机制,该机制可用于在Scheme中对问
类是描述了一组有共同行为的对象。由类描述的对象称为类的一个实例。类指定了其实例拥有的属性(原文为slot卡槽)的名称,而这些属性的值由实例自身来进行填充。类同样也指定了可以应用于其实例的方法(method)。属性值可以是任何形式,但方法的值必须是过程。 类具有继承性。因此,一个类可以是另一个类的子类,我们称另一个类为它的父类。一个子类不仅有它自己“直接的”属性和方法,也会继承它的父类的所有属性和方
一个有用的Scheme程序经常需要与底层操作系统进行交互。 11.1 检查和删除文件 file-exists?会检查它的参数字符串是否是一个文件。delete-file接受一个文件名字符串作为参数并删除相应的文件。这些程序并不是Scheme标准的一部分,但是在大多数Scheme实现中都能找到它们。用这些过程操作目录(而不是文件)并不是很可靠。(用它们操作目录的结果与具体的Scheme实现有关。)
在本章里,我们将使用 Lisp 来自己实现面向对象语言。这样子的程序称为嵌入式语言 (embedded language)。嵌入一个面向对象语言到 Lisp 里是一个绝佳的例子。同時作为一个 Lisp 的典型用途,並演示了面向对象的抽象是如何多自然地在 Lisp 基本的抽象上构建出来。 17.1 继承 (Inheritance) 11.10 小节解释过通用函数与消息传递的差别。 在消息传递模型里,