MATLAB中绘制椭圆
来源:互联网 发布:网络项目投标书 编辑:程序博客网 时间:2024/05/22 06:54
主要参考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°。
>> 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中绘制椭圆
- 绘制椭圆
- 怎样在几何画板中绘制椭圆
- HTML5 Canvas中绘制椭圆的5种方法
- 高速椭圆绘制程序
- c#绘制椭圆
- 拖动鼠标绘制椭圆
- QT绘制椭圆
- 绘制椭圆弧线
- ArcGISEngine绘制椭圆
- UIImage 绘制椭圆
- html5 绘制椭圆
- 【Unity3d】如何绘制椭圆
- 椭圆线条绘制动画
- pygame绘制椭圆方法
- matlab 椭圆方程拟合
- matlab 拟合椭圆
- 绘制椭圆的c程序代码
- 解读replace的第二个参数为函数
- Elasticsearch搜索类型(query type)详解
- leetcode 412. Fizz Buzz
- mysql5.7 忘记root密码
- [Android] USB连接方式(设备文件管理 MTP 模式)下看不到文件的问题、文件内容没刷新的问题
- MATLAB中绘制椭圆
- Xcode8控制台不打印NSLog
- python threading中的join和setDaemon方法
- Linux指令
- PL/SQL中的循环(很low,以后慢慢完善)
- Linux下socket编程之TCP简单实现
- Coroutine协同函数与资源加载
- 数据库全部删除方式 delete truncate
- 建造者模式