MATLAB中绘制椭圆
2017-05-02 14:35
2755 查看
主要参考http://www.ilovematlab.cn/thread-68728-1-1.html
添加一部分自己的体会
一、根据椭圆方程:ax*x+bx*y+c*y*y+d*x+e*y
= f画椭圆
【例1】已知椭圆方程:x*x
+ 2*x*y + 3*y*y + 4*x + 5*y = 6
第一种方法:调用MATLAB自带的ezplot函数画椭圆
>> ezplot('x^2+2*x*y+3*y^2+4*x+5*y = 6')
>> axis([-6 3 -3 3]);
第二种方法:调用自编的ellipsefig1函数画椭圆。ellipsefig1函数的代码如下:
function h = ellipsefig1(a,b,c,d,e,f)
% 画一般椭圆:ax*x+bx*y+c*y*y+d*x+e*y = f
delta = b^2-4*a*c;
if delta >= 0
warning('这不是一个椭圆')
return;
end
x0 = (b*e-2*c*d)/delta;
y0 = (b*d-2*a*e)/delta;
r = a*x0^2 + b*x0*y0 +c*y0^2 + f;
if r <= 0
warning('这不是一个椭圆')
return;
end
aa = sqrt(r/a);
bb = sqrt(-4*a*r/delta);
t = linspace(0, 2*pi, 60);
xy = [1 -b/(2*a);0 1]*[aa*cos(t);bb*sin(t)];
h = plot(xy(1,:)-x0,xy(2,:)-y0, 'k', 'linewidth', 2);
ellipsefig1函数的原理是通过配方将一般椭圆方程化为标准椭圆方程,作出标准椭圆曲线,然后通过坐标旋转和缩放得到所要的椭圆曲线图像。
第三种方法:调用自编的ellipsefig2函数画椭圆。ellipsefig2函数的代码如下:
function h = ellipsefig2(a,b,c,d,e,f)
% 画一般椭圆:ax*x+bx*y+c*y*y+d*x+e*y = f
P = [a b/2;b/2 c];
delta = b^2-4*a*c;
if delta >= 0
warning('这不是一个椭圆')
return;
end
x0 = (b*e-2*c*d)/delta;
y0 = (b*d-2*a*e)/delta;
r = a*x0^2 + b*x0*y0 +c*y0^2 + f;
if r <= 0
warning('这不是一个椭圆')
return;
end
[V, D] = eig(P);
aa = sqrt(r/D(1));
bb = sqrt(r/D(4));
t = linspace(0, 2*pi, 60);
xy = V*[aa*cos(t);bb*sin(t)];
h = plot(xy(1,:)-x0,xy(2,:)-y0, 'k', 'linewidth', 2);
ellipsefig2函数的原理是利用线性代数中所讲的二次型化标准型的办法将一般椭圆方程化为标准椭圆方程,先作出标准椭圆曲线,然后通过坐标旋转得到所要的椭圆曲线图像。
【例2】已知椭圆方程:[x,y][3,
1;1, 4][x,y]' = 5,即3*x*x + 2*x*y + 4*y*y = 5
可用MATLAB自带的ezplot函数,或自编的ellipsefig1和ellipsefig2函数画此椭圆,命令分别如下:
>> ezplot('3*x^2+2*x*y+4*y^2 = 5')
>> axis([-2 2 -2 2])
>> ellipsefig1(3,2,4,0,0,5);
>> ellipsefig2(3,2,4,0,0,5);
二、根据椭圆中心坐标、长半轴、偏心率和方向角画椭圆
【例3】已知椭圆中心坐标为[1,
2],长半轴为10,短半轴为5,方向角为45°。
[align=left]调用MATLAB自带的ellipse1函数画此椭圆,ellipse1函数根据椭圆中心坐标、长半轴、偏心率和方向角画椭圆。[/align]
>> ecc = axes2ecc(10,5); % 根据长半轴和短半轴计算椭圆偏心率
>> [elat,elon] = ellipse1(1,2,[10 ecc],45);
>> plot(elat,elon)
PS此处想说一下自己的体会
之前看集员滤波相关的文献中,对于椭圆约束
一直没太理解清楚,其实很简单,展开后Q为P的逆可得出
也就是说可以写作椭圆边界
q11x1.^2+(q12+q21)*x1*x2+q22*x2.^2=1
就可以利用椭圆的一般式来绘图了。
另外,链接里给出的椭圆画法都是位于坐标原点处的椭圆,想要画在不同中心处的椭圆,可以稍微对代码加以修改
比如,我用的是ellipsefig1函数,将函数第一行function h = ellipsefig1(a,b,c,d,e,f)变为
function h = ellipsefig1(a,b,c,d,e,f,x,y)
最后一行改为h = plot(xy(1,:)-x0+x,xy(2,:)-y0+y, 'k');
调用时x,y即为椭圆中心点。
添加一部分自己的体会
一、根据椭圆方程:ax*x+bx*y+c*y*y+d*x+e*y
= f画椭圆
【例1】已知椭圆方程:x*x
+ 2*x*y + 3*y*y + 4*x + 5*y = 6
第一种方法:调用MATLAB自带的ezplot函数画椭圆
>> ezplot('x^2+2*x*y+3*y^2+4*x+5*y = 6')
>> axis([-6 3 -3 3]);
第二种方法:调用自编的ellipsefig1函数画椭圆。ellipsefig1函数的代码如下:
function h = ellipsefig1(a,b,c,d,e,f)
% 画一般椭圆:ax*x+bx*y+c*y*y+d*x+e*y = f
delta = b^2-4*a*c;
if delta >= 0
warning('这不是一个椭圆')
return;
end
x0 = (b*e-2*c*d)/delta;
y0 = (b*d-2*a*e)/delta;
r = a*x0^2 + b*x0*y0 +c*y0^2 + f;
if r <= 0
warning('这不是一个椭圆')
return;
end
aa = sqrt(r/a);
bb = sqrt(-4*a*r/delta);
t = linspace(0, 2*pi, 60);
xy = [1 -b/(2*a);0 1]*[aa*cos(t);bb*sin(t)];
h = plot(xy(1,:)-x0,xy(2,:)-y0, 'k', 'linewidth', 2);
ellipsefig1函数的原理是通过配方将一般椭圆方程化为标准椭圆方程,作出标准椭圆曲线,然后通过坐标旋转和缩放得到所要的椭圆曲线图像。
第三种方法:调用自编的ellipsefig2函数画椭圆。ellipsefig2函数的代码如下:
function h = ellipsefig2(a,b,c,d,e,f)
% 画一般椭圆:ax*x+bx*y+c*y*y+d*x+e*y = f
P = [a b/2;b/2 c];
delta = b^2-4*a*c;
if delta >= 0
warning('这不是一个椭圆')
return;
end
x0 = (b*e-2*c*d)/delta;
y0 = (b*d-2*a*e)/delta;
r = a*x0^2 + b*x0*y0 +c*y0^2 + f;
if r <= 0
warning('这不是一个椭圆')
return;
end
[V, D] = eig(P);
aa = sqrt(r/D(1));
bb = sqrt(r/D(4));
t = linspace(0, 2*pi, 60);
xy = V*[aa*cos(t);bb*sin(t)];
h = plot(xy(1,:)-x0,xy(2,:)-y0, 'k', 'linewidth', 2);
ellipsefig2函数的原理是利用线性代数中所讲的二次型化标准型的办法将一般椭圆方程化为标准椭圆方程,先作出标准椭圆曲线,然后通过坐标旋转得到所要的椭圆曲线图像。
【例2】已知椭圆方程:[x,y][3,
1;1, 4][x,y]' = 5,即3*x*x + 2*x*y + 4*y*y = 5
可用MATLAB自带的ezplot函数,或自编的ellipsefig1和ellipsefig2函数画此椭圆,命令分别如下:
>> ezplot('3*x^2+2*x*y+4*y^2 = 5')
>> axis([-2 2 -2 2])
>> ellipsefig1(3,2,4,0,0,5);
>> ellipsefig2(3,2,4,0,0,5);
二、根据椭圆中心坐标、长半轴、偏心率和方向角画椭圆
【例3】已知椭圆中心坐标为[1,
2],长半轴为10,短半轴为5,方向角为45°。
[align=left]调用MATLAB自带的ellipse1函数画此椭圆,ellipse1函数根据椭圆中心坐标、长半轴、偏心率和方向角画椭圆。[/align]
>> ecc = axes2ecc(10,5); % 根据长半轴和短半轴计算椭圆偏心率
>> [elat,elon] = ellipse1(1,2,[10 ecc],45);
>> plot(elat,elon)
PS此处想说一下自己的体会
之前看集员滤波相关的文献中,对于椭圆约束
一直没太理解清楚,其实很简单,展开后Q为P的逆可得出
也就是说可以写作椭圆边界
q11x1.^2+(q12+q21)*x1*x2+q22*x2.^2=1
就可以利用椭圆的一般式来绘图了。
另外,链接里给出的椭圆画法都是位于坐标原点处的椭圆,想要画在不同中心处的椭圆,可以稍微对代码加以修改
比如,我用的是ellipsefig1函数,将函数第一行function h = ellipsefig1(a,b,c,d,e,f)变为
function h = ellipsefig1(a,b,c,d,e,f,x,y)
最后一行改为h = plot(xy(1,:)-x0+x,xy(2,:)-y0+y, 'k');
调用时x,y即为椭圆中心点。
相关文章推荐
- matlab绘制peano(皮亚诺)曲线和koch(科赫曲线,雪花曲线)分形曲线
- 杭州地图的绘制matlab
- MatLab中函数图形的绘制
- 有关线性代数的Matlab代码笔记(3)——左零空间、二维图像绘制
- Matlab手动绘制bounding box,并获取其坐标
- Matlab做分布拟合及绘制频率分布直方图
- Matlab绘图——ROC曲线绘制(官方demo)
- Matlab图像处理——在任意位置绘制二维箭头的总结
- MATLAB曲线绘制
- MATLAB绘制空间域高斯函数
- 使用MFC进行编程,绘制直线椭圆以及样条曲线
- MATLAB学习笔记之-----绘制直方图
- matlab绘制立体图
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- 图像的绘制 直线 椭圆 圆形 多边形
- matlab中直方图的绘制方法
- 动画原理——绘制正弦函数&环绕运动&椭圆运动
- 使用Matlab绘制图像的rgb颜色空间和Lab颜色空间分量图和分量直方图
- 使用matlab绘制数学函数
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等