一、相关概念
1.shell:终端中的命令(人机交互)类似于windows中的批处理文件(*.bat)
2.shell的版本(/etc/shells)
3.shell命令的基本格式
提示符 命令 参数 操作数(ls -l /etc)
特殊格式:
多条命令同时执行:命令1;命令2;...
ls -l /bin bash;pwd
输入输出重定向:
[stdin (<):默认从键盘输入 编号:0
(eg:cat | cat <&0 | cat </php/a.c)
stdout (> >>):默认从显示器输出 编号:1
>:覆盖原文件的内容
>>:在原文件基础上进行数据的追加
stderr: 编号:2
/dev/null:相当于windows的回收站
]
管道:
格式:命令1|命令2|命令3|....
后面命令的输入是前面命令产生的输出结果
4.shell脚本的运行、切换及退出
linux下的命令的执行:在bin、sbin下的命令直接输入命令的名称即可
linux下的应用程序怎么执行?
直接输入可执行程序的绝对路径 /home/***/a
进入应用程序所在文件夹 直接输入: ./a
运行的的如果为shell脚本:sh shell脚本的文件的绝对路径或相对路径
退出:exit退出到上一级的shell
补充进程树(pstree):父进程
-----子进程
----子进程
5.echo的使用
echo 常量或变量
echo $var
var="hello"
echo hello|"hello"|'hello'
echo $var|"$var"|'$var'
echo `命令`
6、shell中的变量
系统变量:env
普通变量:根据作用域的不同分为全局变量和局部变量
局部变量的作用域当前的shell
局部变量---->全局变量(各层的shell中都有效):在声明变量的基础上用export var来将变量声明为全局变量。
Echo $var和echo ${var}
Shell中数值的计算
将数值及公式赋值给变量需要在赋值表达式外加((var=1+2+3+4+5)),否则将数值或公式当作字符串处理
7.read的使用
Read var1 var2 var3…
(1) 输入的值的数量等于变量的个数
(2) 输入的值的数量大于变量的个数
(3) 输入的值的数量小于变量的个数
8.特殊变量
系统预置的变量(环境变量):env
$?:测试前一步操作是否成功,成功返回0否则返回1
利用sh命令可以进行变量的声明
$#:代表利用sh进行输入的变量值的个数
$*:列出所有变量的值
$1、$2…$9:代表前9个变量的值
访问$9以后的值需要进行移位:shift n:n为整数,表示变量值向左移动的位数
10.流程控制
If case while for
条件格式:
Test或[ ]([[ ]])来进行测试
Test 条件表达式
逻辑运算符:
逻辑运算符的“短路现象”:本质 0&&*都为0,所以*就不再执行
&nbs
简单的说SVM是一种对线性合非线性数据进行分类的方法。
以二维数据为例,中间的直线将数据分为两部分,分别用实心的圆点和空心的圆点表示。
对于上边的数据可能有很多直线将数据区分开,如下
SVM通过搜索最大边缘超平面来选择最合适的超平面,因为具有较大边缘的超平面对于未来的数据分组分类更好的准确性。
分离超平面表示为:
W*X+b =0
位于超平面上方的点满足 W*X+b >0,位于超平面下方的点满足 W*X+b <0,
可以定义分离超平面的边缘为:W*X+b =1 和W*X+b =-1;边缘之间的距离可以推到为 2/|w|。
对于非线性可分的情况,需要按照如下两步扩展SVM:
Orange中的SVM基于LibSVM 、 LIBLINEAR 这两个库。提供了三个学习算法
-
SVMLearner
-
SVMLearnerEasy
-
LinearSVMLearner
下面的例子使用了这三种算法:
from Orange import data from Orange.classification import svm iris = data.Table("iris") svm_easy = svm.SVMLearnerEasy(iris,name="svm easy", folds=3) svm_normal = svm.SVMLearner(iris,name="svm") svm_linear =svm.LinearSVMLearner(iris,name="svm linear") for i in iris[:5]: print svm_normal(i),svm_easy(i),svm_linear(i),i.getclass()
运行结果如下:
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
下图用可视化的方式比较了svm和其它分类算法结果:
数据挖掘:概念与技术 http://book.douban.com/subject/2038599/
数据挖掘导论:http://book.douban.com/subject/5377669/
说明:Collada的文件格式,中文版的很少,在csdn上看到了一个Sleepy的感觉,也不是全面特别是没有图让我很伤感,所以我在这里加上了图,希望对大家有帮助。
一步一步的使用C++和OPENGL实现COLLADA骨骼动画
第一部分
英文原作者:waZim
原文标题:Step by Step Skeletal Animation in C++ and OpenGL, Using COLLADA
原文地址:http://www.wazim.com/Collada_Tutorial_1.htm
Sleepy译
译注:
这是一篇详细介绍COLLADA文件(也就是DAE文件,3D模型文件的一种)格式的文章。之所以翻译这篇文章的原因,一是这篇文章的确写得很好很详细,另一方面关于DAE文件格式的中文资料非常的少,每次看E文的也累,所以正好翻译出来一了百了。
我是从看dancingwind(周炜)与AKER翻译的NEHE Opengl教程开始学习Opengl的,对这些将外国的优秀文章和教程汉化的人,我向他们致以由衷的感谢,同时也以此译文向他们致敬。
另外,本人E文水平有限,有些词翻译得不是很准(但我相信应该不会对阅读的人造成误导),如果发现错误和不完善的地方(估计会有很多),大家可以通过邮件与我交流,我会在第一时间更正错误。
谢谢。
Sleepy
本次修改:2011-09-08
介绍:HI,我是waZim,欢迎来到我的第一篇骨骼动画的教程。这一系列教程由两部分组成:
1. 了解如何读取COLLADA文件(概括的介绍COLLADA文件)。
2. 用C++和OPENGL去真正实现第一部分所讲的内容。
第一部份:
阅读与理解COLLADA文件
正如在前面的介绍部分里所说,这篇教程分为两个部份。第一部分的一般性的讲解并不考虑和涉及任何编程语言。但是如果你想直接跳到第二部分去看程序实现的话,你非常可能会感到完全无法理解从而无法继续下去。所以强烈建议对于COLLADA文件一无所知的初学者来说,还是耐心看完第一部分的介绍再去看第二部分的实现。
废话不多说,让我们开始吧。
COLLADA文件
在我们准备开始深入挖掘COLLADA文件的意义之前,我希望你们先下载一个实例文件,这个文件我们将做为此教程从头到尾讨论的对象(所以大家还是下载回来对照参看吧)。大家可以在COLLADA模型中心中找到它。它的名字叫“astroBoy_walk.dae”,如果你到处都找不到这个文件,那么好吧,你可以到这篇教程所在网页的“下载”部分找到它。(我怎么找不到)
就像我们之前所说的,COLLADA文件以XML的形式存储。现在大家可以打开前面所说的示例文件看看,你可以用你最喜欢的文本编辑器打开这个文件(IE就不错)。你会看到一个根结点名为“COLLADA”,如果你所用的文本编辑器支持展开与折叠XML结点的话(IE就可以),你可以通过点击+-号把各个结点展开收起来成这个样子:
图1:COLLADA文件的概览
在.dae文件或.xml文件的根结点<COLLADA>下你会找到很多library这样的东西,它们就是用来存储模型中各种不同各类的信息的。比如<library_geometries>就是用来存储几何数据的(就是三角形啊,还有所谓的mesh啊 – 另外mesh这个词好像大家叫成英文的比较多,下面遇到这个词就不译成中文了);<library_lights>则是用来存储光照和场景数据的。大家看看图1,并不是什么制造火箭般的高科技是不是,通过这些叫library_xx的东西我们能找到模型实际的各种数据。而像如几何数据的存储区会有<geometry>名字的结点,而光照数据的存储区会有叫<light>的结点,这表明这些数据存储区里存储的模型或光照数据常常不止一组。现在,让我们来一个一个地分析每个数据区,按照每个数据区的重要性不同,我会将它们合理的排列在这篇教程的不同位置。
首先,为了让问题变得简单,正如我说的这是篇入门教程,所以我们不会讨论COLLADA文件的每一个方面,为了在教程中除去其中的复杂的部分,我们来设定几个前提条件。
前提条件:
1. 虽然无论COLLADA文件从Max中导出还是从Maya中导出照理说应该是一样的,但实际上在某些情况下总会有那么一点不同。我们只讨论从Max中导出的COLLADA文件,当然这并不是说用Maya的人就杯具了。因为我仍可以肯定的是,如果COLLADA从Maya中导出时,在弹出的COLLADA导出选项对话框中将“triangulate”这个选项钩上,并且以“背向矩阵”(backed matrices,我没用过Maya,也不知道是什么)方式导出的话,则与Max导出的是一样的。但是因为我有用过Maya,所以不知道我的导出器载入Maya导出的文件时会失败在什么地方。
2. COLLADA文件中必须仅仅只有一个mesh,这意味着任何在max文件中有用的数据都已经记录下来了(原文:which means, anything in the asset's Max file, should be attached.不知道该怎么译,不过好像对文章的内容并没影响)。所以我们在COLLADA文件中的<library_geometries>结点里不会看到多于1个的<mesh>结点。但如果我们能读取1个<mesh>,那我们同样的也能读取成千上万个<mesh>不是吗。
3. COLLADA里的几何图形是以三角形的方式记录的,因为这即使不是最好的,也是比较好的记录方式,我们可以直接提供三角形数据给OPENGL,所以我们让Max帮我们将图形导出为三角形记录的方式。
4. 在稍后的实现部分,我们还假定我们所分析的COLLADA中只包含一个贴图文件。
5. COLLADA中的动画至少含有一个骨骼—--至少一个根骨骼(这是很典型的)。嗯,我想,我们能实现骨骼动画,我们简直是英雄般的人物。(原文:And I think that’s why we are here, to implement skeletal animation.)
6. 导出到COLLADA中的硬动画必须以矩阵的形式保存,从本质上来说,在某些情况下这个形成一个动画的通道而其它情况下则会生成16个动画通道(什么是通道,我们稍后解释)。(原文:Animation exported to COLLADA must be baked in matrices, which essentially in some cases makes 1 channel of animation and in others 16 channels of animation (Now what is channel? It should be explained later).)
7. 动画只在通道向对象实体施加变化影响时才有效,请把它们相像得尽量简单和清晰。如果你固化了矩阵,那么前面所说的事就理所当然的被完成了,所以不用担心这些。(原文:Animations can only be valid if the channel targets the "Transform" of the targeted entity, just to keep things clear and easy. When you will bake matrices, then you will have this automatically, so don't need to worry about that.)
8. 动画不能包含嵌套的动画。
9. 只支持骨骼动画(没有硬动画)(译注:那你前面说一大堆硬动画的事干毛啊。)
10. 层次中的每个骨头都必须对某些皮肤产生影响,换句话说,它们都必须关联到皮肤上。
请大家在脑中从头到尾一直保持上面所列的这些假设,让我们开始一个一个部分为你讲解。你会觉得一切都很容易,如果你立即跳到实现部分去看你也会发现这些原来并不难。下面的每一节中都会给出相应实现代码的链接
从COLLADA文件中读取几何数据