demi的博客

浅谈虚拟现实

我最近对VR很感兴趣所以我看了很多这方面的资料,虽然我不是这方面的专家,只是一个爱好者,但我谈谈虚拟现实。

首先,什么是VR?

虚拟现实(Virtual Reality,简称VR),是由美国VPL公司创建人拉尼尔(Jaron Lanier)在20世纪80年代初提出的。其具体内涵是:总合利用计算机图形系统和各种现实及控制等接口设备,在计算机上生成的、可交互的三维环境中提供沉浸感觉的技术。其中,计算机生成的、可交互的三维环境成为虚拟环境(即Virtual Environment,简称VE)。

发展VR的必然性

随着社会经济的发展,计算机已经成为社会生活中不可缺少的重要组成部分,友好的人机接口技术很早已成为人们关心的一个重要课题,因为一个比较差的人机交互接口很可能将使一个功能很强的产品变得不可接受。计算机刚出现时的巨无霸机器到现在的书本一样的大小,从计算机的外设到计算机的触屏这些无一不说明了人们对人机交互的注重。而VR的人机交互性远超现在的产品的人机交互性。随着人们的生活水平的提高,人们将不断追求物质的极致享受,而VR是的出现和发展是必然的和必须的。

机器学习中的相似性度量

在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。

本文的目的就是对常用的相似性度量作一个总结。

1. 欧氏距离(Euclidean Distance)

欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。

(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:

关于Cocos2d-x中的scheduleUpdate和update方法的使用

一、如果要让某类实例对象要连续执行某些语句(比如让每个Block实例从运行框最右边移动到最左边)

要在Block类中增加一些东西

1. 先在其.cpp文件的init()函数中执行scheduleUpdate()方法。

2. 然后在.h中声明一个虚拟的函数update,并在.cpp文件中定义update,当init中执行scheduleUpdate()时,会不断地调用update函数,里面的语句也不断地被执行,直到执行unscheduleUpdate()时停止调用update()函数,unscheduleUpdate()语句一般放在update函数中,当满足某个条件时就执行。

二、如果要不断地创建某个类的实例对象(比如不断地创建新的Block在最右边),可以用到嵌套的update方法

要在GameController类中增加一些东西

1. 先在HelloWorld类的.cpp文件的init()函数中执行scheduleUpdate()方法。

总结 | 八类软件开发方法!

在上个世纪60年代中期爆发了众所周知的软件危机。为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。至今已形成了八类软件开发方法。

Parnas方法

最早的软件开发方法是由D.Parnas在1972年提出的。由于当时软件在可维护性和可靠性方面存在着严重问题,因此Parnas提出的方法是针对这两个问题的。首先,Parnas提出了信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。这样,在将来由于这些因素变化而需修改软件时,只需修改这些个别的模块,其它模块不受影响。信息隐蔽技术不仅提高了软件的可维护性,而且也避免了错误的蔓延,改善了软件的可靠性。现在信息隐蔽原则已成为软件工程学中的一条重要原则。

OpenGL学习——颜色的选择

OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。

无论哪种颜色模式,计算机都必须为每一个像素保存一些数据。不同的是,RGBA模式中,数据直接就代表了颜色;而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表。

1. RGBA颜色

RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha不直接影响颜色,它将留待以后介绍。

在RGBA模式下选择颜色是十分简单的事情,只需要一个函数就可以搞定。

glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的值,而A值采用默认;四个参数的版本可以分别指定R、G、B、A的值。例如:

void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

扒一扒自动驾驶车辆激光雷达的部件功能

据外媒报道,自动驾驶车辆配置的多款摄像头,旨在用该设备探查道路上的障碍物并绘制车辆周边环境。在各类传感器中,在功能方面,激光雷达传感器与人眼最为接近,其光探测和测距系统(detection and ranging system)与雷达类似,但其采用了光波替代了无线电波(radio waves)。

激光雷达系统利用激光脉冲信号“照亮(illuminate)”目标区域,并计算反射信号返回接收器的用时。该类系统由光源、光电探测器、数据处理电子器件及运动控制设备。

自动驾驶车辆大体采用了两类激光雷达设备,其分类依据为扫描车辆周边环境时所采用的方式,其中:1、3D闪光式激光雷达(3D flash LiDAR)由宽视角源及广视角光学件构成,旨在聚焦探查设备一次曝光(one exposure)上的所有反射光。2、扫描式激光雷达系统可向各个方向发射激光,逐个探查回响(echoes)以便绘制车辆周边环境。

图像处理算法——图像常用操作

图像处理基本算法操作从处理对象的多少可以有如下划分:
1. 点运算:处理点单元信息的运算
2. 群运算:处理群单元 (若干个相邻点的集合)的运算

表1 图像处理操作按处理对象数量分类表格

图像处理算法——图像常用操作

下图是一副普通的吉普车图像和我们生活中见到的并没有什么两样,但是在计算机看来则是另外一副“模样”了。图像中黄色部分则是几部车图像倒车镜的局部图像在计算机中的形态。

图像处理算法——图像常用操作
图1 计算机图像的真实表现形态

以上图为例说明几种重要的点运算和群运算。

改变世界的十位算法大师

算法是整个计算机科学的基石,是计算机处理信息的本质。 从开创算法分析这一领域的高德纳、Amazon的“首席算法官”乌迪·曼伯尔,到发明快速排序算法托尼.霍尔,本文介绍了对AI、以及整个计算领域影响深远的十位算法大师。

Don E.Knuth 高德纳

【Unity编程】Unity中关于四元数的API详解

Quaternion类

Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表示所有的旋转。

Quaternion是基于复数,并不容易直观地理解。 不过你几乎不需要访问或修改单个四元数参数(x,y,z,w); 大多数情况下,你只需要获取和使用现有的旋转(例如来自“Transform”),或者用四元数来构造新的旋转(例如,在两次旋转之间平滑插入)。

大部分情况下,你可能会使用到这些函数:
  •  Quaternion.LookRotation,
  •  Quaternion.Angle
  •  Quaternion.Euler
  •  Quaternion.Slerp
  •  Quaternion.FromToRotation
  •  Quaternion.identity。

Quaternion 是一个结构体,本身成员变量相对简单,可以作为函数参数高效传递。-

一文读懂区块链技术六大核心算法

近日,在加密货币经历“混乱时期”后,区块链再次火爆起来,受到了各方的极大关注与重视,成为资本市场和各领域关注的焦点,就连朋友圈中的探讨和分享也让人目不暇接。那么,区块链到底是个什么鬼?区块链的核心算法又有哪些?

区块链核心算法一:拜占庭协定

拜占庭的故事大概是这么说的:拜占庭帝国拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。

在这个分布式网络里:每个将军都有一份实时与其他将军同步的消息账本。账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。