绘图:使用MATLAB绘制三叶玫瑰线
公式:
玫瑰线的极坐标方程为:ρ=a* sin(nθ),ρ=a*cos(nθ)
用直角坐标方程表示为: x=a* sin(nθ)* cos(θ), y=a*sin(nθ)* sin(θ)
其中n为玫瑰线的叶数,我们绘制三叶玫瑰线,因而公式中取n=3
代码:
t=-2*pi:0.01:2*pi;
x=sin(3*t).*cos(t);
y=2*sin(3*t).*sin(t);
z=3*sin(3*t).*sin(t);
figure
[AX,H1,H2]=plotyy(x,y,x,z,'plot');
set(get(AX(1),'Ylabel'),'string','the y1')
set(get(AX(2),'Ylabel'),'string','the y2')
xlabel('the x')
title('three leaves rose line')
set(H1,'LineStyle',':')
set(H2,'color','g')
代码解析和易错点提示:
我们将公式里的θ记作t。
接下来出现了一个特别容易报错的点,由于我们设置的t其实是一个数组,是从-2pi到2pi,步长为0.01的数组,所以sin(3*t)和sin(t)实质上都是相同大小的数组,如果直接使用*计算二者乘积,相当于是11257大小(用MATLAB右侧工作区得知的)的两个矩阵相乘,明显不符合线性代数对于矩阵乘法的要求(左矩阵的行数等于右矩阵的列数),MATLAB会报错,报错提示是错误使用 * ,内部矩阵维度必须一致。所以我们这里使用了.*,即每个位置的元素对应相乘。
下面我们创建一个画布。
接下来的plot函数是用于将y和z画在同一个x轴上。
下面是一些图形美化函数,这里为了美观,将y曲线设置了虚线,z曲线则是绿色的曲线。
还有一个比较有意思的点是,MATLAB会自动调整两个y轴的刻度大小,所以一开始我y曲线和z曲线的方程恰好是整数倍的关系(z=n*y n=1,2,3,...),导致只会画出一条曲线,因为左右两边的刻度不一样,左边也是右边的偶数倍,曲线重合了,所以这里改成了非整数倍,方便同时显示出两条线来。
曲线绘制通常是取步长为0.01,步长越小自然曲线越精细。
最后的结果图如下图所示: