z=cross(x,y)
z=dot(x,y)
figure;
= meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(Z);
x1=xlabel('X');
x2=ylabel('Y');
x3=zlabel('Z');
set(x1,'Rotation',45);
set(x2,'Rotation',-45);
1)、假设a和b都是单位向量,a叉乘b得到旋转轴,a点乘b再求arccos得到旋转角度,从而得到四元数表示
2)、将四元数转换为欧拉角,
公式见 http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html
如果在matlab里实现的话,可以直接调用Aerospace Toolbox里的quat2angle,实现四元数到欧拉角的转换
[r1 r2 r3] = quat2angle(q)
[r1 r2 r3] = quat2angle(q, s)
其中q为四元数,r1-r3为欧拉角,s为欧拉转序(rotation sequence,有的资料译成“顺规”)。
1>、输出的欧拉角单位是弧度;
2>、欧拉角的定义有很多种,应用在不同的领域(有时用的名字,例如 Tait-Bryan角)。确切点说,一共有12种定义——第一次旋转可以绕任何一个坐标轴进行(3),第二、第三次旋转要绕除上一次旋转之外的另外两个坐标轴(2x2),所以,一共可以有3x2x2=12种定义。quat2angle支持这全部12种定义,并以三次旋转的坐标轴表示,例如'ZYX', 'ZYZ', 'ZXY',等等。默认的转序是ZYX。
3>、上面说的转序涉及到坐标系的定义,该函数的坐标系定义为Z轴为竖轴,可能与某些领域的习惯不同,需要特别注意。
[yaw, pitch, roll] = quat2angle([
1
0
1
0
])
yaw =
0
pitch =
1.5708
roll =
0
clc,clear
x=[11.9,11.5,14.5,15.2,15.9,16.3,14.6,12.9,15.8,14.1];
y=[196.84,196.84,197.14,197.03,197.05,197.13,197.04,196.96,196.95,196.98];
plot(x,y,'.')
公式表示为: f(n)=g(n)+h(n),
其中 f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价。
保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取:
估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
如果 估价值>实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解
(1)元胞数组的创建
a={'matlab',20;ones(2,3),1:10} %创建方法一
b=[{'matlab'},{20};{ones(2,3)},{1:10}] %创建方法二
c={10} %赋值方法一
>> c(1,2)={2} %赋值方法二
isequal(a,b) %判断是否相同whos
用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。
>> a=cell(1)
(2)元胞数组的数据获得
从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如a{1,2}表示元胞数组中第一行第二列的元胞。
>> a={20,'matlab';ones(2,3),1:3}
使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。
>> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]
a =
[1] [2] [3]
[4] [5] [6]
[7] [8] [9]>> b=a(2:3,2:3)
b =
[5] [6]
[8] [9]
(3)元胞数组的删除和重塑
要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。
(4)元胞数组中的操作函数
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组
(5)元包数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。
(6) cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。
能在cellfun中使用的函数:
isempty:若元胞元素为空,则返回逻辑真
islogical:若元胞元素为逻辑类型,则返回逻辑真
isreal:若元胞元素为实数,则返回逻辑真
length:元胞元素的长度
ndims:元胞元素的维数
prodofsize:元胞元素包含的元素个数
(7)元胞数组的嵌套
元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。
[x,y,z]=cylinder;%生成圆柱点 surf(x,y,z)%画圆柱%上面是画圆柱的方法,其中z表示高度,在z前乘个系数就可以更改高度,如:surf(x,y,3*z)也可以调整它们顺序 ,如:surf(x,z,y) cylinder函数可以更改半径及生成的点数,可以看帮助文件:>> doc cylinder
1) 函数写法: 函数名与文件名相同 function [] = fdisplaymark(marks,num)
2) 坐标轴一致 axis equal;
3) 网格 grid on;
4) [rows,cols] = size(marks);
5) 画线 (0,0) --> (10,0) line([0,10],[0,0]) ;hold on % line( [x1,x2],[y1,y2] )
x = mark17(520:1:680, 1) ; y =mark17(520:1:680, 2); p = polyfit(x,y,1); xx = min(x):1:max(x); yy = polyval(p,xx) >> plot(x,y,'bo'); hold on; plot(xx,yy,'r-'); hold off; grid on; legend('原始数据点','拟合线','Location','NorthWest'); disp(['y =' poly2str(p,'x')]); y = -0.085181 x + 49.4111 >> plot(x,y,'bo'); hold on; >> plot(xx,yy,'r-');
14 varargin 变量列表
Variable-length input argument list
例如
filter = ekf_filter( x_k_k, p_k_k, sigma_a, sigma_alpha, sigma_image_noise, 'constant_velocity' );
function f = ekf_filter( varargin ) f.type = varargin{6}; f.x_k_k = varargin{1}; f.p_k_k = varargin{2}; f.std_a = varargin{3}; f.std_alpha = varargin{4}; f.std_z = varargin{5}; f = class(f,'ekf_filter');
15 读取图片
imRGB=imread(sprintf('%s%04d.pgm',image_file_name_prefix,k)); % pgm是灰度图像
im=imRGB(:,:,1);
imread可以直接读取RGB图像
显示 imshow