webdancer's Blog

opengl配置

     SC写了使用mingw时的opengl配置。由于我是使用VS,记录一下Windows7 下VS2010的opengl配置。由于图形学刚开始学,了解的不多。

 

     1.安装Glut。GLUT是OpenGL应用工具包的缩写,英文全称为OpenGL Utility Toolkit,是一个和窗口系统无关的软件包,可以给我们的学习带来方便。当然,也可以选择不安装。

       下载:http://www.opengl.org/resources/libraries/glut/glut37.zip

       文件介绍:

       glut.h -你需要在你的源代码中包含这个文件. 通常情况下, 这个文件应该放在你系统的包含目录下的 GL 文件夹中。

       glut32.lib (微软版本) 和glut.lib (SGI windows版本)  - 这个文件必须被连接到你的程序中, 确保它放在 LIB 目录中。

       glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据你所使用的OpenGL选择一个, 如果你正在使用微软公司的版本, 那么你必须选择 glut32.dll. 你应该把DLL放置在你的系统文件夹中。

       在我的机子里,具体为:

        glut.h  ---> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl

        glut.dll,glut32.dll ---> C:\Windows\SysWOW64 (windows7 64位操作系统)

                                  ---> C:\Windows\System32   (windows7 32位操作系统)

        glut.lib,glut32.lib ---> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib

 

     2.建立project。

注意:项目选择Win32控制台项目,文件的后缀为c。

试一下:

#include <gl\glut.h>
#include <math.h>
void dda(int x1,int y1,int x2,int y2){
	int k,i;
	float x,y,dx,dy;
	k=abs(x2-x1);
	if(abs(y2-y1)>k)
		k=abs(y2-y1);
	dx=(float)(x2-x1)/k;
	dy=(float)(y2-y1)/k;
    x=(float)(x1);
	y=(float)(y1);
	for(i=0;i<k;i++){
		//gl_point(int(x+0.5),int(y+0.5));
		glBegin(GL_POINTS);
		glVertex2i((int)(x+0.5),(int)(y+0.5));
		glEnd();
		x+=dx;
		y+=dy;
	}
}
void printline(void){
	glClearColor (1.0,1.0,1.0,0.0);
    glMatrixMode (GL_PROJECTION);
    gluOrtho2D (0.0,200.0,0.0,150.0);
	dda(15,15,300,300);
	glFlush();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("第一个OpenGL程序");
    glutDisplayFunc(printline);
    glutMainLoop();
    return 0;
}

对于mingw感兴趣的,可以参考:http://scturtle.is-programmer.com/posts/24996.html

递归

     对于递归算法,基本没有什么理解,但是有时候递归的用处还是很多的。记录几个例子。

1.用递归的方法,写函数itoa(n,s),将整数转为字符串。

int i;

void itoa(int n,char s[]){

    if(n/10)
        itoa(n/10,s);
    else{
        i=0;
        if(n<0)
            s[i++]='-';
    }
    s[i++]=n%10+'0';
    s[i]='\0';
}

2.用递归方法,写函数reverse1(s),将字符串倒置。

void swap(char *i,char *j){
    char tmp;

    tmp=*i;
    *i=*j;
    *j=tmp;
}
void reverse0(char s[],int i,int n){
    int j;

    j=n-(i+1);
    if(i<j){
        swap(&s[i],&s[j]);
        reverse0(s,++i,n);
    }
}
void reverse1(char s[]){
    
    reverse0(s,0,strlen(s));

}

3.Fibonacci数列的递归实现。

int fibonacci(int n){
    if(n<2)
        return n;
    else
        return fibonacci(n-1)+fibonacci(n-2);
}

4.求最大公约数。

 int gcd(int x,int y){
 	if(y==0)
 		return x;
 	else
 		return gcd(y,x%y);
 }

递归:函数不断调用自身,直到遇到结束条件停止。

代码简洁,容易理解。但是,递归过程会消耗大量的栈空间,不适合嵌入式系统或者内核态编程。

 

云计算——中国IT的机遇与挑战

     最近,上课老师提的最多的就是云计算与物联网了,接触“云计算”这个名词应该有很长的一段时间了,最初,是SC在我们班的班会上讲的。但是并没有什么特别的想法,对之也没什么了解。但是,最近感觉这个想法很有意思。

     File:Cloud computing.svg

     什么是云计算呢?现在,还没有什么统一的解释,大概为:用户通过简单的终端,就可以访问和使用由“云”提供的计算服务。这多云就是“数据云”和“应用云”,它有大型机构(google、MS .etc)提供。

     我不想在这里讨论云计算的优缺点,只是想谈一下:我们中国在云计算的机遇和挑战。

     在云计算的架构里面,数据和应用的提供时高度集聚的,“云”接受和处理的数据是巨大的,这里就要用到高性能的计算机,甚至是超级计算机。这样,我们国家在超级计算机方面的优势可以体现出来。我们的超算中心,可以扩容变成一个一个的巨大的“云朵”,来提供巨大的数据和应用处理、提供能力。当然,计算机基础科学的突破,虚拟化,并行运算等也是必需的,软件资源的提升对云来说就是大脑。

     我们知道,在传统的PC产业里,由于用户习惯和市场垄断,wintel联盟应该是处于绝对的优势地位。但是,云计算的出现,使得终端的结构和功能变化的越来越大。在未来,像Chrome这样的浏览器就是OS,OS就是浏览器,将会日益普遍,终端更加的简单,便携。可能没来的终端完全不像我们想在所看到的,完全不像。终端的一致化我感觉应该是趋势,未来不管终端是什么,我们应该完全感觉不到这其中的差别,我们注意的知识数据和应用本身,用户有最低的学习成本。在这方面,我们要创新,不能跟着别人亦步亦趋。

     总之,在云里的数据是每一个IT巨头抢夺的,也许国家也会加入进来。当巨大的信息汇聚成云是,也许世界上中重要的宝藏竟形成了。到底,我们中国人,能不能抓住机遇,牢牢地把自己的云保护起来,别让他跑走。

omg,看看自己的生活

-------------------------------送给过去和未来的自己--------------------------------------------

大学匆匆的已经过去了三年,自己也到了毕业班,不到一年就要毕业了,心里真是各种滋味。在这个时候应该停下来回顾一下自己的大学时光了,看一下过去的生活,总结一下,为今后做一下盘算。“凡事预则立,不预则废”,这时我们初中老师挂在嘴上的一句话,好像烙在了心底。

在大学之前对计算机真的是一无所知,高考之前甚至也没有进过网吧,不知道怎么就选了这个专业,有点鬼使神差吧!不过还是挺喜欢这个专业的,了解了以前从来不知道的工具。三年的时间了学了很多东西,要说理解的深刻的东西,真的不多。还是菜鸟一个。的确应该总结一下自己过去的学习生活,看一下过去的状态,看一下如何改进学习方式,看一下怎样安排剩下的一年,看一下大学来思想的转变。

1.目标。

进了大学以后,不知道多少人会怀揣着梦想,知道自己毕业后到底该干什么。反正我没有,反正我的的舍友也没有,每天晚上睡的很晚,起的很晚,生活也颓废了,我们甚至都不会聊这方面的东西。课前从不预习,上课的时候也是睡意阑珊,课后也不复习。考试也是临时抱佛脚,而且一般问题还不大。宽松的环境本来是培养兴趣的大好事,但是对我们这种从小学就在应试的高压下生活的真是伤不起呀!没有目标,缺少了方向,生活自然就颓废起来了。

2.生活。

大学生活是多姿多彩的,的确我们这里的生活也还high.与舍友的关系很和谐,与同学的关系也不错。隔三差五的就出去撮一顿,喝的也是不亦乐乎。遗憾的是没有学个吉他什么的,出去旅游的机会也很少,看过的毛片也不多,锻炼的不够,觉得挺可惜的。生活最重要的是一个宽容的心态,不要把物质的东西看的太重。

3.学习。

从一个刚上大学的时候几乎什么都不懂,到现在也是这个状态,可能是自己的学习的方法和态度出了问题。记得大一的时候有时还会去问老师问题,但是大二后就再也没出现过了。本来随着学习的逐步深入,应该更好地与老师交流的。这方面还是有很多东西要总结的。

     (1)从小学接受的教育和学习习惯,使我养成了“被动的接受知识”的习惯,而且不善于思考。这对一个学习计算机的人来说可谓致命的。以前,也没有注意到,现在慢慢的发现了,知识绝不能浅尝辄止,囫囵吞枣。最近上嵌入式课程,觉得老师说的很对,很多东西不是你不知道,而是你不懂,懂得东西不需要太多,该懂得一定要懂了,不要放过。

     (2)自己的性格问题。记得从小学时,老师就说我“一瓶子不满,半瓶子咣当”。这句话指出了我的一大缺点:容易骄傲和满足,做事马马虎虎,不仔细。

     (3)学习不成体系,零零散散,重复学习。重复学习很是可怕,因为你的时间总是有限的。学习计算机的不能总是重复,因为这是一个迅速变化的知识门类,必须及时的充电。

     (4)学校的教学问题,也是很大的原因。我们的学习氛围不是很好,导致了自己懒惰的状态,这是很可怕的。我觉得这就是中国大学的很大的问题:学生的活力。由于上大学之前,对计算机了解的很少,所以上大学后就有点不知所措了,再加上(1),自学能力差,这就造成了很大的问题。大一讲编程语言,老师就是空洞的讲JAVA的语法,对于一个连“程序概念”都知之甚少的人来说,只是被动的学习,老师还是满堂灌给你。很多的东西都不知道,这样就匆匆过了。讲数据结构,也是这样,对于程序了解不深,数据结构有什么用,就无从谈起了。

大学的时间也不多了,是时候做出一些改变了,重新开始,还得相信自己!

谈一下自己的未来的计划:

1.职业目标是成为一个搜索工程师。

2.生活目标是:短期能够学会一种乐器,长期就是美满的幸福生活,^_^。

3.学习目标:提高逻辑能力和动手能力,具体的学习目标最近还得仔细的想一下,什么是搜索要学的呢?

PPS for Linux 正式发布

如题,感觉现在Linux上的软件越来越来丰富。而且,许多的本地网络公司开始重视linux了。闲话不说了。

下载:http://www.ppstream.com/download.html

 

PPS Linux PC版本使用说明

 

软件版本:0.1.1678
    * 安装需求:Ubuntu 8.04+, 只能用于x86 Linux个人电脑.
    * 软件大小:1.5MB(deb包)
 
安装说明:

辅助软件:
    安装PPS Linux版本前需要先安装以下辅助软件:
    * QT库, 4.4.0及以上版本
    * libFuse库, 2.7.2及以上版本
    * Mplayer, 1.0rc2及以上版本
    * MPlayer视频解码器: MPlayer Essential Codec Pack(http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2)
    
    推荐使用apt-get方式安装: sudo apt-get install libqt4-core libqt4-dbus libqt4-gui libqt4-network libqt4-webkit libqt4-xml libfuse2 mplayer

 

c++容器

     容器,顾名思义就是可以包含其他的对象。之前,接触过的类似容器的就是数组了。现在,接触一下容器,容器应该有很对好处。其中,很重要的一点就是容器有对应的迭代器,可以很容易的遍历。

     在C++里用到的最多的应该就是Vector了。

vector<int> a;
	if(a.empty()){
	for(int i=0;i<9;++i){
		a.push_back(i);
	}
	}
	cout<<a[3]<<endl;

     最好还是与迭代器一起用,这样的功能也是比较强的。

vector<int>::iterator iter;
	for(iter=a.begin();iter!=a.end();++iter){
		cout<<*iter<<endl;
	}

     使用迭代器可以很方便的遍历容器。特别是注意:迭代器的有效性,在操作时注意那些使迭代器失效的方法。我测试了一下:insert和erase方法竟然没有失效,也许是简单的原因吧!

iter=a.begin()+2;
	a.erase(iter);
	for(;iter!=a.end();++iter){
		cout<<*iter<<endl;
	}

删除后,迭代器并没有失效呀!sad但是,安全期间还是给iterator重新赋值吧!详细:

http://hi.baidu.com/nxxch1989/blog/item/c0ffec220d5c285d9922ed7c.html

ubuntu下阅读源代码

最近做操作系统的实验,需要看一下系统的源码。但是以前也没有用过这样的工具,就从网上搜了一下。

1.sourece navigator 。好像是红帽出的一款工具,但是太复杂,不好上手,页面也不好看。

2.vim+插件的形式。vim以前也用过,觉得挺好,记录一下。vim+taglist+ctags,可以很好的实现。

ctags在ubuntu的软件仓库中有,可以直接装上。taglist好像没有,可以从vim的网站上下载,安装。这样可以基本满足了。但是,最好还是配上多窗口。在这里有详细的:http://www.vimer.cn/2009/10/%E6%8A%8Avim%E6%89%93%E9%80%A0%E6%88%90%E4%B8%80%E4%B8%AA%E7%9C%9F%E6%AD%A3%E7%9A%84ide2.html

c++学习笔记5

突然发现有一个很重要的地方,但是一直不太明白。那就是引用与指针的区别,对指针思考的比较多,但是引用确实想当然。我的最大特点就是:想当然,缺少思考。什么是引用呢?

int a=0;
      int & ra=a;

引用就是对象的另一个名字,不引入新对象。

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

引用的使用场合:

1.参数传递,某些大型对象可以节省空间。

2.重载操作符时,应该使用引用。例如:[]。

当然,使用引用的地方,可以使用指针。不知道,大家怎么理解的。




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee