-
如何将照相机移动到空间中的一点,并且观察方向朝向某一物体
2009-08-27 15:06:001。确定照相机在世界坐标中的观察方向为 m_kCamDirection...确定被观察物体的世界位置为kTarget 3。将照相机沿着观察方向后退N给单位 - N * m_kCamDirection 4。将 kTarget加上 : kTarget - N * m_kCamDirection1。确定照相机在世界坐标中的观察方向为 m_kCamDirection
2。确定被观察物体的世界位置为kTarget
3。将照相机沿着观察方向后退N给单位 - N * m_kCamDirection
4。将 kTarget加上 : kTarget - N * m_kCamDirection
-
腾讯管家的托盘加速球是如何实现的
2020-04-02 17:45:231、钩子钩到 TrayNotifyWnd 的大小改变事件,在里面根据窗体的句柄重新安排窗体位置,留下了自己图标大小的空间,然后放个置顶的窗体在上面 2、将 deskband 注册到了那个位置(猜的,完全没有头绪) 最神乎其技... -
走近分形与混沌(part2)-豪斯多夫维数
2020-04-18 13:25:17例如,所谓我们生活在三维空间,是因为我们需要三个数值:经度、纬度和高度来确定我们在空间的位置。 如上面所定义的拓扑维数,如何用分数维数才能解释像皮亚诺图形、科赫雪花、分形龙这些奇怪的几何图形呢? 维数...读书笔记
学习书目:《蝴蝶效应之谜:走近分形与混沌》-张天蓉;
分数维
在经典几何中,是用拓扑的方法来定义维数的,也就是说,空间的维数等于决定空间中任何一点位置所需要变量的数目。例如,所谓我们生活在三维空间,是因为我们需要三个数值:经度、纬度和高度来确定我们在空间的位置。
如上面所定义的拓扑维数,如何用分数维数才能解释像皮亚诺图形、科赫雪花、分形龙这些奇怪的几何图形呢? 维数概念的扩展,要归功于德国数学家费利克斯·豪斯多夫。豪斯多夫在1919年给出了维数新定义,为维数的非整数化提供了理论基础。
在分形几何中,我们将拓扑方法定义的维数,扩展成用与自相似性有关的度量方法定义的维数。我们在之前的Blog中已经介绍了分形龙的自相似性,其实,经典整数维的几何图形,诸如一条线段、一个长方形、一个立方体,也具有这种自相似性,只不过,它们的自相似性太平凡而不起眼,被人忽略了而已。也就是说:线、面、体……这些我们常见的整数维几何形状,也算是分形.就像实数中包括了整数一样,扩展了的分形维数定义当然也包括了整数维在内。
用自相似性来定义维数,可以这么理解,首先将图形按照N∶1的比例缩小,然后,如果原来的图形可以由M个缩小之后的图形拼成的话,这个图形的维数d,也叫豪斯多夫维数,就等于:
我们以线、面、体为例,来解释豪斯多夫维数:
(a)中一条线段是由两个与原线段相似、长度一半的线段接成的;(b)中长方形自身可以看成是由4个与自己相似的,大小为四分之一的部分组成的;(c )中一个立方体,则可以看成是由8个大小为自身八分之一的小立方体组成的。
计算他们的豪斯多夫维数,分别为1维、2维、3维。
现在我们以同样的方法来计算科赫曲线的维数:
首先,将科赫曲线的尺寸缩小至原来的三分之一;然后,用4个这样的小科赫曲线,便能构成与原来一模一样的科赫曲线。因此,我们得到科赫曲线的维数,这就说明了,科赫曲线的维数不是一个整数,而是一个小数,或分数……
-
快速排序!名字就叫“ 快速 ”排序,你服不服?
2019-05-16 14:18:02快速排序 ...快排的前身是归并,归并的最大问题是需要额外的存储空间,并且由于合并过程不确定,致使每个元素在序列中的最终位置上不可预知的。针对这一点,快速排序提出了新的思路:把更多的时间...快速排序
一、快排算法有什么优点,为什么称之为“快”排?
QuickSort是对归并排序算法的优化,继承了归并排序的优点,同样应用了分治思想。
1.如何“分”?(如何缩小问题的规模)
2.如何“治”?(如何解决子问题)
快排的前身是归并,归并的最大问题是需要额外的存储空间,并且由于合并过程不确定,致使每个元素在序列中的最终位置上不可预知的。针对这一点,快速排序提出了新的思路:把更多的时间用在“分”上,而把较少的时间用在“治”上。从而解决了额外存储空间的问题,并提升了算法效率。
快排之所以被称为“快”排,是因为它在平均时间上说最快的,主要原因是每趟快排需要指定一个“基准值”(也就是作为分界点的值),一趟中涉及的所有比较都是与这个“基准值”来进行比较的,效率自然大大提高。除此之外,快排的高效率与分治思想也是分不开的。
基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
二、如何“分”?(即如何确定“基准值”)
确定一个“基准值”,将数组分为两个部分(比基准值小的 | 比基准值大的)
如何确定这个基准值呢?
1、随机
在所要排序的数组中,随机选取一个数来作为基准值,需要将其交换到最边上。
2、直接取最边上的值(任选左右)。
3、三数取中法
因为前两种取值方法,有大概率取到要排数组的最大值或者最小值,导致所分的两部分的其中一侧没有元素(选取最边上的元素作为基准值,并且数组已经有序或数组逆序,都是最坏情况),为了避免出现这种情况,我们采用三数取中法。
在[ left, left +(right -left)/2, right ] 中,通过判断,选取其中大小为 中 的元素。
例如:9 8 3 4 5 7 2 其下标 0~6 ,left = 0,mid = 3,right = 6; 比较array[left] ,array[mid] ,array[right],得到基准值为“4”。这样就有效避免了取到 极值 的可能。
代码如下:
private static int 三数取中(int[] array,int left, int right) { int mid = left +(right -left)/2; if (array[left] > array[right]){ if(array[left] < array[mid]){ return left; }else if (array[mid] > array[right]){ return mid; }else{ return right; } }else{ if (array[right] < array[mid]){ return right; }else if(array[mid] > array[left]){ return mid; }else{ return left; } } }
如何将比基准值小的放左,大的放右?
1、Hover
代码如下:
//1、Hover private static int parition_01(int[] array,int left,int right){ int begin = left; int end = right; int pivot = array[right]; while (begin < end){ while (begin <end && array[begin] < pivot){ begin++; } while (begin < end && array[end] >= pivot){ end--; } Swap(array,begin,end); } Swap(array,begin,right); return begin; }
Swap:
private static void Swap(int array[],int a,int b){ int t = array[a]; array[a] = array[b]; array[b] = t; }
2、挖坑法
代码如下:
//2、挖坑法 private static int parition_02(int[] array,int left,int right){ int begin = left; int end = right; int pivot = array[right]; while (begin < end){ while (begin <end && array[begin] < pivot){ begin++; } array[end] = array[begin]; while (begin < end && array[end] >= pivot){ end--; } array[begin] = array[end]; } array[begin] = pivot; return begin; }
3、前后下标
代码如下:
//3、前后下标 private static int parition_03(int[] array,int left,int right){ int back = left; int pivot = array[right]; for (int i = left; i <= right; i++){ if(array[i] < pivot){ Swap(array,back,i); back++; } } Swap(array,back,right); return back; }
三、如何“治”?(怎么处理已经分好了的区间)
代码如下:
private static void quickSortInner(int[] array, int left, int right) { // 直到 size == 1 || size == 0 if (left == right) { // size == 1 return; } if (left > right) { // size == 0 return; } // 要排序的区间是 array [left, right] // 1. 找基准值,array[right]; int originIndex = sanShuQuZhong(array, left, right); swap(array, originIndex, right); // 2. 遍历整个区间,把区间分成三部分 int pivotIndex = partition3(array, left, right); // 比基准值小的 [left, pivotIndex - 1] // 比基准值的 [pivotIndex + 1, right] // 3. 分治算法 // 处理比基准值小的区间 quickSortInner(array, left, pivotIndex - 1); // 处理比基准值大的区间 quickSortInner(array, pivotIndex + 1, right); } public static void quickSort(int[] array) { quickSortInner(array, 0, array.length - 1); }
快速排序总结:
1.时空复杂度:快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。
实际应用中,快速排序的平均时间复杂度为O(nlogn)。快速排序在对序列的操作过程中只需花费常数级的空间。空间复杂度为 O(log(n))。但需要注意递归栈上需要花费最少logn最多n的空间。
2.稳定性:不稳定
-
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--详细书签版
2013-02-04 12:43:522.11 确定执行计划 46 2.12 执行计划并取得数据行 50 2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 3.1 全扫描访问方法 55 3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码
2013-02-04 12:49:332.11 确定执行计划 46 2.12 执行计划并取得数据行 50 2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 3.1 全扫描访问方法 55 3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全... -
arcgis工具
2012-10-22 22:37:31Tab:在跟踪要素模式下对注记放置的位置进行左右边的切换 P:在跟踪要素模式下对注记放置的角度进行平行和垂直方向的切换。 E:在Sketch工具、Edit工具和Edit Annotation工具间切换 L:在跟踪要素模式下将选中的... -
C++程序设计语言(特别版)--课后习题源代码
2012-04-23 07:37:34本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:456.2.9 主动的表空间的空间预警 178 6.2.10 管理重做数据的生成 180 6.2.11 重新命名表空间 180 6.2.12 只读表空间 181 6.2.13 使表空间脱机 181 6.3 临时表空间 181 6.3.1 创建临时表空间 182 6.3.2... -
大话数据结构三个版本
2018-09-10 09:39:38而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8... -
《大话数据结构》( 程杰 编著)
2018-02-15 10:00:21而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8... -
C++程序设计语言(特别版)--详细书签版
2012-04-23 07:13:03本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=... -
C++程序设计语言(特别版)--源代码
2012-04-23 07:33:51本书的目的就是帮助读者了解c++是如何支持编程技术的,使读者能从中获得新的理解,从而成为一名优秀的编程人员和设计人员。适合做高校面向对象编程课程的教科书,也可作为c++爱好者的参考书。 [center] [a href=... -
大话数据结构
2019-01-10 16:35:22而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8... -
大话数据结构 程杰
2018-09-01 10:06:43而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1顺序存储结构不足的解决 办法 55 3.6.2线性表链式存储结构定义 56 3.6.3头指针与头结点的异同 58 3.6.4线性表链式存储结构代码描述 58 3.7单链表的读取 60 3.8... -
大话数据结构(中文高清版)
2017-04-19 11:57:09而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1 顺序存储结构不足的解决 办法 55 3.6.2 线性表链式存储结构定义 56 3.6.3 头指针与头结点的异同 58 3.6.4 线性表链式存储结构代码描述 58 3.7 单链表的读取 ... -
汽车驾驶教程图解
2012-05-26 08:56:12首先确定手握转向盘的位置 a.选择适合自己的身材、容易操作的位置(在时钟上10点10分至9点15分之间)。 b.依靠手腕、肩部、手指的力量,轻揉协调地操控转向盘。 c.用食指到小手拇指四个手指握住转向盘,再加上... -
相机标定 matlab
2018-05-24 21:58:54第一步是从世界坐标系转为相机坐标系,这一步是三维点到三维点的转换,包括R,t(相机外参,确定了相机在某个三维空间中的位置和朝向)等参数; 第二部是从相机坐标系转为成像平面坐标系(像素坐标系),这一步是三... -
大话数据结构-程杰
2014-07-13 23:45:52而只是让每个元素知道它下一个元素的位置在哪里。 3.6.1 顺序存储结构不足的解决 办法 55 3.6.2 线性表链式存储结构定义 56 3.6.3 头指针与头结点的异同 58 3.6.4 线性表链式存储结构代码描述 58 3.7 单链表的... -
Linux操作系统基础教程
2013-04-08 21:34:26如何得到Linux的最新消息?.........................................................................................3 五.Linux操作系统上有什么应用?....................................................... -
php高级开发教程说明
2008-11-27 11:39:22的变量名字、类型、定义位置的清单,那么你就创建了一个类似于小电话簿的东西,你想让你 的清单成为什么样子呢?不同的命名方案已发展起来了,它们有不同的思想及各自的优点和缺 点,这些方案一般分为两类:简短的... -
网管教程 从入门到精通软件篇.txt
2010-04-25 22:43:49ITS:脉冲跟踪系统抽样,Internet文档位置 IV:Open Inventor中使用的文件格式 IVD:超过20/20微观数据维数或变量等级文件 IVP:超过20/20的用户子集配置文件 IVT:超过20/20表或集合数据文件 IVX:超过20/20微... -
微软活动目录管理管理简明手册
2010-12-08 11:04:17而如果活动目录中的资源对应的是LDAP标识,那么只需要DNS中有这个标识的定位记录就可以很方便地供用户查找资源,并寻址到相应的位置上。' u* [+ L2 m- \ j: h: L. r7 u 有关DNS服务器的配置,读者可以参考《电脑报... -
net学习笔记及其他代码应用
2010-11-16 18:15:09答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。 24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 答:string str = null 是不给他分配... -
C#微软培训教材(高清PDF)
2009-07-30 08:51:17附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <<page 4>> page begin==================== 第一部分 C#语言概述 第一章 第一章第一章 第一章 .NET 编程语 编程编程 编程 言 语言语言... -
jquery插件使用方法大全
2012-05-24 23:58:18可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供更好的封装、避免名称空间冲突。当然,也可以用来开发插件,但Resig强烈建议在开发插件之前,先考虑jQuery UI widget... -
Tcl_TK编程权威指南pdf
2011-03-25 09:30:55确定软件包的位置:auto-path变量 使用软件包 对软件包加载的总结 package命令 基于文件tclindex的库 unknown命令 方便交互 tclshell的库环境 编码风格 第13章 反射与调试 clock命令 info命令 跨平台... -
C#微软培训资料
2014-01-22 14:10:17附录 C .Net 名字空间成员速查.269 参 考 资 料 .300 <<page 4>> page begin==================== 第一部分 C#语言概述 第一章 第一章第一章 第一章 .NET 编程语 编程编程 编程 言 语言语言... -
Quartus_II使用教程
2012-11-26 23:20:43三个选项自己英文都能够看懂,更新后引脚的位置有可能改变了,自己需要注意下,然 后重新连接正确。重新编译。 得到正确的波形图后,写实验报告的时候需要对波形图进行说明,此时点选A工具, 进行注释十分方便... -
前端开发基础-JavaScript
2020-11-20 18:08:12存在会返回它所在的位置,没有返回-1 - lastIndexOf 从最后开始查询字符串 - toUpperCase 转大写 - toLowerCase 转小写 - match 正则表达式使用跟exec一样 - search 正则表达式使用,查询到返回...