Come what may, heaven won't fall.
日历
网志分类
· 所有网志 (40)
· ACM & Algorithm (6)
· English Study (4)
· 课程设计 (3)
· 大学 (19)
· 读研 (7)
· 未分类 (1)
· Locations of visitors to this page
最新的评论
· 12/19 学习啦
站内搜索
友情链接
· 我的歪酷
· KangKang Yin_@_MSRA
· Weiwei Xu ___@_MSRA
· MSRA blog
· Zhou Lin @ ZJU
· ZJU Online Judge
· TopCoder

订阅 RSS

0021581

歪酷博客

8600 @ 2010-04-25 15:44

一直都对有创意的东东很感兴趣. 而对GeekCook的认识, 缘于一个朋友买的一个挂钟(下图). 个人认为GeekCook的产品主要是互联网方面的流行元素在日常用品的体现, 像Gmail, Facebook, twitter, android等等都包含在其中. 其他的DIY还有台灯等, 大爱下面这款台灯.


 
8600 @ 2009-05-07 21:47

最近在看一些有关摄像头的程序时,偶然发现了一个很有意思的实验,就是用摄像头来测距。改天找一个激光笔也来玩下看:)

如何用摄像头来测距(opencv) 作者:郭世龙

       最近一直忙着找工作,blog都长草了,今天把以前作的一个东西放上来充充门面吧。记得在哪看到过老外做的这个东西,觉得很好玩,就自己也做了一个。在摄像头下面固定一个激光笔,就构成了这个简易的测距装置。看一下图吧。
      

     

原 理

假设激光束是与摄像头的光轴完全平行,激光束的中心落点在摄像头的视域中是最亮的点。激光束照射到摄像头视域中的跟踪目标上,那么摄像头可以捕捉到这个点,通过简单的图像处理的方法,可以在这侦图像中找到激光束照射形成的最亮点,同时可以计算出Y轴上方向上从落点到图像中心的象素的个数。这个落点越接近图像的中心,被测物体距离机器人就越远。由下图图可以计算距离D:

(1)

等式中h是一个常量,是摄像头与激光发射器之间的垂直距离,可以直接测量获得。

θ可通过下式计算:
θ=Num*Rop+Offset      (2)                           
其中:Num是从图像中心到落点的像素个数
Rop是每个像素的弧度值
Offset是弧度误差
合并以上等式可以得到:
(3)
Num可以从图像上计算得到。Rop和Offset需要通过实验计算获得。首先测量出D的准确值,然后根据等式(1)可以计算出准确的θ,根据等式(2)可到只含有参数Rop和Offset的方程。在不同的距离多次测量D的准确值计算θ,求解方程组可以求出Rop和Offset。这里Rop=0.0030354,Offset=0.056514344。





 
8600 @ 2009-05-05 21:07

纠结了一段时间的图形学作业终于完成了:

(1) zbuffer扫描线
扫描线扫描过程中把所有像素点的信息记录下到GLubyte imageData[M_HEIGHT][M_WIDTH][3]; 最后用glDrawPixels画.
由于大量使用了STL,在VS2005 debug下是release的N倍................. 
结果比较搓, 截的2个图:

21177个点,24975个面:

 
4721个点,9395个面:


(2) 光线跟踪
第一次检查时没有用面光源, 漫射也没处理好, 老彭给了C,如下图 (阴影很差, 没有反走样, 球面的反射有问题等....)


修改了一晚, 加上面光源反走样等等, 效果好了些, 拿到了B+, 如下图:
用了kd-tree跟一些迭代中的剪枝之后还是跑了80多分钟才出来, 看来我的加速还需很大的改进



Anyway, 终于结束了这个作业,可以缓一口气,,,,,,,,,,,,,,,,,,,,,,,,,,,
开始下一步计划..............................................................................


 
8600 @ 2009-03-08 22:40

速度 + 调试能力是要解决的最关键问题, 直接导致RT变化剧烈, 500分题目很多时候都有思路, 但不是实现出问题就是调不出来--_--!!, 这个悲哀的历史帖在这里, 希望下次贴的时候能力真的能提高了.  Work hard!



 
8600 @ 2009-02-08 19:15

1.与或图的解图及其费用
  在一棵与或树中,加到一个节点上的""或者""标记取决于该节点与其父辈节点的关系。一种情况是由总数据库标记的一个父辈节点拥有一组与后继节点,每一个后继节点都用一个分量数据库来标记。另一种情况是由分量数据库标记的一个父辈节点拥有一组或后继节点,每个后继节点都用对该分量数据库应用一条选出的规则而得到的新数据库来标记。
  我们所要讨论的一般是与或图,而不是与或树这种特殊情况,因为应用不同序列的规则可能生成相同的数据库。例如,用来标记某一节点的某一分量数据库,既可以从已分解的一个复合节点得到,也可以使用某一条规则从另一个节点得到。在这种情况下,对于其中一个父辈节点来说它可以叫做或节点,而对另一个父辈节点它又可以叫做与节点。因此,我们一般不把一个与或图的节点叫做与节点或者或节点,而是引入某个适合于图的更一般的标记。不过,我们仍然把这些结构叫做与或图,并在讨论与或树时继续采用与节点和或节点等术语。
  这里我们把与或图定义为超图,并且不用弧线来连接节点对,而用几条超弧线来连接一个父辈节点和它的一组后继节点。这些超弧线又叫做连接符。每个k—连接符是从一个父辈节点指向一个含有k个后继节点的集合(如果所有连接符都是单一连接符,那么我们使得到一个普通图的特例)。图3.13给出一个与或图的例子。
  图中,节点n。有二个1—连接符指向其后继节点n1,还有一个2—连接符指向其后继节点集合{n4n5}。在我们所用的各个图例中,对于k>1k-连接符,我们都用一般圆弧连接从父辈节点到其后继节点集合各元之间的所有弧线来表示(如果采用原先的术语,相对于它们共同的父辈节点n。,节点n4n5可以称为一组与节点,而n1可称为或节点。而关于节点n8,它既居于其父辈节点n5的一个与节点集合,又是其父辈节点n4的一个或节点) 

                                         

3.13 与或图举例


  在与或树中,每个节点最多只有一个父辈节点。在与或树和与或图中,我们把没有任何父辈节点的节点叫做根节点。在与或图中,我们把没有后继节点的节点叫作叶节点(对于与或树则叫做端节点)
  一个可分解的产生式系统规定了一个隐含的与或图。初始数据库对应于图中一个特别的节点,叫做起始节点。起始节点有一个外向连接符连到它的一组后继节点,这些后继节点对应于初始数据库的分量(假如初始数据库可以加以分解的话)。每条产生式规则在隐含图中都对应于一个连接符。这种连接符指向的那些节点对应于应用规则和分解数据库后得到的分量数据库。在隐含图中,与满足产生式系统终止条件的数据库相对应的是一个终节点集合。
  产生式系统的任务可以看做是寻找从起始节点到终节点的某个解图。粗略地说,从一个与或图的节点n到节点集合N的一个解图类似于一个普通图中的一条路径。这个解图的求法如下:从节点n开始,正确地选择一条外向连接符,从该连接符所指向的后继节点出发,我们可以继续选用一个外向连接符,依此类推下去,直到最后由此产生的每个后继节点都是集合N中的一个元为止。图3.14中给出了图3.13中从节点n。到{n7n8}的两个不同的解图。


3.14 两个不同的解图

  假设我们的与或图中不包含环,即在与或图中不存在这样的节点,它的后继节点同时又是它的祖先。因而节点存在一种局部的顺序,它能保证我们所采用的递归过程的终止。今后,我们就一直使用这种无环性假定。
  现在让我们来为解图下个精确的递归定义。
  设某个与或图G中,从节点n到一节点集合N的一个解图记作G'G'G的子图。若nN的一个元,则G'是由单一节点n组成的;若有一个指向节点{n1n2......nk}的外向连接符K,使得从每个niN有一个解图,其中i=12……k,则G'由节点n、连接符K,节点{n1nk}以及从{n1nk}中的每个节点到N的解图所组成,否则从nN不存在解图。
  象在普通图中采用的弧线费用叶一样,在与或图中给连接符指定一定的费用往往是很有用的(这些费用模拟规则应用的代价。我们仍然需要假设每个费用都大于某个小的正数e)。然后,连接符的费用便可用来计算一个解图的费用。设从任意节点n到节点集合N的一个解图费用记为k(nN),则值k(nN)可以递归计算如下:
  若nN的一个元,则k(nN)=0,否则,n有一个通到解图中后继节点集{n1ni}的外向连接符。令该连接符的费用为Cn,于是我们可得

k(n,N)=Cn+k(n1,N)+…+k(ni,N)

从上式可以看出,从节点nN的一个解图G'的费用等于离开n的外向连接符(G')的费用加上从n的各后继节点(G’)N的每个解图费用的总和。由于我们有了无环的假设,所以该递归定义是满足的。
  在一个解图费用的定义中,我们可能要不止次地计算解图中某些连接符的值。一般地说,离开某节点m的一个外向连接符的费用被算进从nN的一个解图费用中去的次数,恰好等于在解图中从nm的路径数。因此,在图3.14中,如果每个k—连接符的费用为k,两个解图的费用分别为87
  除了寻找从起始节点到一组终节点的任意解图之外,我们还可能想找出具有最小费用的一个解图来。我们称这样的一个解图为最佳解图。我们把从n到一组终节点的最佳解图的费用记作函数h*(n)

2.AO*算法
  让我们来描述一种具有启发成分的估价函数的搜索过程,它可以被设计来用于与或图。h(n)h*(n)的一个估计,h*(n)则是从节点n到一个终节点集合的一个最佳解图的费用。正如图搜索一样,如果h满足一定的限制,则搜索过程语句是可能得到简化的。
  在我们的讨论中,对h加以单调限制,即对隐含图中从节点n指向其后继节点n1nk的每个连接符施加限制。我们假设

h(n)≤c+h(n1)+…+h(nk)

其中,c为连接符的费用。这一限制类似普通图中对启发函数的单调限制。对于n在终节点集合中的情况,若有h(n)=0,则单调限制意味着hh*的一个下界,即对于所有的节点n,有h(n)≤h*(n)
  现在,我们可以把与或图启发式搜索过程陈述如下:
AO*
过程
  (1) 建立一个搜索图G,使其仅仅包含起始节点S,对应于节点S的费用为qs=h(s)。如果S为终节点,则标记SSOLVED
  (2) unit1 S已经标记SOLVEDdo
  (3) begin
  (4) 通过跟踪G中从S出发的有标记的连接符(G的连接符将在以后的步骤中标记),计算G中的一个局部解图G'
  (5) select G' 的任意一个非终叶节点n(将在以后说明如何选择)
  (6) 扩展节点n,生成它的全部后继节点,并把它们作为n的后继节点设置在G中。于未曾在G中出现过的每一个后继节点nj,相应的费用q(nj)=h(nj)。对这些后继节点中属于终节点者,标记SOLVED,并赋其值为0
  (7) 建立一个正好包含节点n的单一节点集合S
  (8) until S为空,do
  (9) begin
  (10) S中移出这样的节点m,这个mG中的后裔不出现在S中。
  (11) 根据以下步骤修改m的费用q(m):对于从m指向节点集{n1i,nki}的每个连接符,计算

qi(m)=Ci+q(n1i)++q(nki)

式中,q(nji)(其中j=12k)或者通过这一内循环在上述某道运算中刚刚计算过,或者,这是第一道运算,那么它们已在第6步中计算过。令q(m)为全部外向连接符qi(m)中的最小值,并对这个具有最小值的连接符加以标记,如果以前的标记情况与此不同,则抹掉以前的标记,如果通过这个连接符的全部后继节点都已标记SOLVED,则标记此节点mSOLVED
  (12) 如果m已标记为SOLVED,或者m的修正费用不同于它的前一道费用,则把m的所有那样的父辈节点都添加到S中去,这些父辈节点的通过某个有标记连接符的后继节点之一就是节点m
  (13) end
  (14) end
  AO*算法可以理解为下列两个主要运算的反复。首先,一个自上而下的图生长运算(4至第6),通过跟踪有标记的连接符寻找最好的局部解图。这些以前计算过的标记指明在搜索图中离开每个节点的当前的最好局部解图(在该算法终止之前,最好的局部解图尚未产生它的全部终叶节点,所以称它为局部的)。对这个最好的局部解图的非终叶节点之一进行扩展,并把某个费用赋给它的后继节点。
  AO*算法中的第二个主要运算是一个自下而上的费用修正、连接符标记和SOLVED标记的过程(7-12)。从刚被扩展的节点开始,此过程修正其费用值(利用其后继节点最新计算的费用),并把外向连接符标记到被估计为达到终节点的最好路径上。图中,这个修正值的估计是向上传送的(图的无环性保证这种向上传送过程不会遭到循环)。修正费用q(n)是从n到一组终节点的一个最佳解图费用的一个修正估计。仅仅那些经过费用修正的节点,其祖先才有可能拥有它们的修正值,因而只需要考虑这些祖先。由于我们曾经假设h是单调限制的,费用的修正只可能是费用的增大。因此,并非所有的祖先都需要进行费用修正,只有那些具有最好的局部解图而且含有修正费用的后裔之祖先才需要进行费用修正(所以有第12)
  AO*算法在一些特殊场合可以简化,可以进行改进,提高算法的性能,限于篇幅,暂时不对这些展开讨论。
[http://jxzy.lzptc.edu.cn/ziyuan/20/!rgzn/rengongzhineng/kejian/AI/Ai/chapter3/325.htm]

 



 
8600 @ 2008-10-23 18:51

Introduction
The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. It is free software under the GNU General Public License.
The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting. There are over 1000 functions in total with an extensive test suite.
The complete range of subject areas covered by the library includes,
Complex Numbers                                  Roots of Polynomials
Special Functions                                   Vectors and Matrices
Permutations                                            Sorting
BLAS Support                                          Linear Algebra
Eigensystems                                          Fast Fourier Transforms
Quadrature                                                Random Numbers
Quasi-Random Sequences                  Random Distributions
Statistics                                                    Histograms
N-Tuples                                                    Monte Carlo Integration
Simulated Annealing                              Differential Equations
Interpolation                                             Numerical Differentiation
Chebyshev Approximation                  Series Acceleration
Discrete Hankel Transforms                Root-Finding
Minimization                                             Least-Squares Fitting
Physical Constants                                IEEE Floating-Point
Discrete Wavelet Transforms              Basis splines 
Unlike the licenses of proprietary numerical libraries the license of GSL does not restrict scientific cooperation. It allows you to share your programs freely with others.
http://www.gnu.org/software/gsl/