直角坐标系下的画图及其转换公式
在直角坐标系下我们的圆方程是:
222()()x a y b R -+-=
其中,a 和b 是圆心,R 是半径。
但在画圆的时候,你就会发现如果按该公式画圆,多半是不成功的,或者画了一半,所以在matlab 中画圆,一半采用极坐标形式 圆对应的极坐标转换公式为:
cos sin x R y R θ
θ
=⎧⎨
=⎩(公式1) 这个很容易理解,你画个单位圆来看看就知道了。
那么上面那个黑色的点的x 坐标和y 坐标用半径和连线与坐标轴x 的夹角来表示,就得到了公式1。
观察这个公式,我们发现,在极坐标系下,圆的半径没变,夹角是在不断变化的,所以,在matlab 中极坐标系下画单位圆的问题可以这样来考虑:
首先将夹角360等分,也就是每一个步长为360度/360; 但需要指出的是,matlab 中正弦预先函数的变量其实是弧度,并不是度。
这个你在matlab 命令窗里就可以试:
比如你要得到30度的正弦值,一般是sin (pi/6),而不是sin(30)。
这里的pi 是3.1415926的在matlab 中的表示。
所以我们的步长应该是弧度制的,我们知道,1度对应的弧度为360/(2*pi)。
也即180/pi; 所以我们的夹角应该是: Theta=0:180/pi:2*pi-180/pi;
注意,由于是从零开始画图的,所以最后一个应该是2*pi-180/pi;而不是2*pi ; 这个时候我们可以开始画图了 X=R*cos(Theta); Y=R*sin(Theta); Plot(x,y,’r.’)
axis square %保证画出来的圆是圆的。
Polar 命令
回顾上述过程,我们知道,这个画图最终还是在直角坐标系下显示的。
要在极坐标下画,就需要采用matlab 特有的polar 命令
查阅matlab 帮助文档就会发现polar 的用法 发现其语法是这样的: polar(theta,rho,LineSpec)
有了这个,我们可以这样来用 thetta=0:180/pi:2*pi-180/pi; R=499.9
polar(Theta,R,'r.')
但这样运行,系统会报错 ??? Error using ==> polar at 64
THETA and RHO must be the same size.
查找原因发现,是R 应该与Theta 是一对一的 所以修改程序如下:
thetta=0:pi/180:(2*pi-pi/180); len=length(thetta); R(1:len)=499.9; polar(thetta,R,'r.'); 生成效果图如下:
90
270
当然,这种方法生成的圆是圆心在原点的,要生成圆心坐标(3.7017,10.058),半径r=499.9的圆,可能要重新计算极坐标系下的半径
此时,在极坐标系下的半径就成了a=3.7017,b=10.058.
cart2pol 命令
顾名思义就是将matlab 直角坐标转化为极坐标 语法为:[THETA,RHO] = cart2pol(X,Y)
这个就提供给了我们另外一种思路,先生成在直角坐标系下的圆,再转化到极坐标系下
cos sin x a R y b R θ
θ=+⎧⎨
=+⎩
公式2 公式2是圆心在(a ,b ),半径为R 的圆 thetta=0:pi/180:(2*pi-pi/180); >> R=499.9;
>> x=R*cos(thetta); >> y=R*sin(thetta); >> plot(x,y,'b.') >> axis square 效果如图:
-500
500
关于这个函数的用法,你自己揣摩一下吧!。