【原创】Matlab中如何实现任意位置圆柱的绘制
(2009-08-27 10:54:27)
标签:
杂谈 |
分类: MATLAB |
本帖由Matlab技术论坛原创,原帖参见 http://www.matlabsky.com/thread-362-1-19.html
在Matlab中绘制圆柱有专用的cylinder()函数,通过参数控制可以创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱或变形圆柱
但是使用cylinder创建的圆柱都是以z轴为旋转对称轴,高度永远为1的简单圆柱
那我们如何创建一个有倾角,直径、对称轴、圆心等都可以直接定义的圆柱呢?或者直白点说,我如何通过两点加半径如何绘制一个圆柱或圆台
好下面我们分析下!!
但是使用cylinder创建的圆柱都是以z轴为旋转对称轴,高度永远为1的简单圆柱
那我们如何创建一个有倾角,直径、对称轴、圆心等都可以直接定义的圆柱呢?或者直白点说,我如何通过两点加半径如何绘制一个圆柱或圆台
好下面我们分析下!!
圆柱的平移和放缩
平移和放缩相对来简单很多,平移我们只要将x和y坐标加一个常数即可,放缩只要将z坐标乘以一个放大因子即可
R=1;%半径
a=2;%原点x坐标
b=3;%原点y坐标
h=4;%圆柱高度
m=100;%分割线的条数
[x,y,z]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱
x=x+a;%平移x轴
y=y+b;%平移y轴,改为(a,b)为底圆的圆心
z=h*z;%高度放大h倍
mesh(x,y,z)%重新绘图
a=2;%原点x坐标
b=3;%原点y坐标
h=4;%圆柱高度
m=100;%分割线的条数
[x,y,z]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱
x=x+a;%平移x轴
y=y+b;%平移y轴,改为(a,b)为底圆的圆心
z=h*z;%高度放大h倍
mesh(x,y,z)%重新绘图
如果对Matlab绘图学的较好的,对圆柱绘图本质认识比较深的网友,可以看看下面的函数,它没有用到cylinder函数
function
cylinder2(x0,R,H,m,n)
%绘制任意位置、大小的圆柱,但是对称轴平行与z轴
%x0=[a,b]圆心位置
%R圆柱半径
%H=[h1,h2]圆柱高度,h1为底圆的z坐标,h2为上圆的z坐标
%m圆方向的等分数
%n高度方向的等分数
%
%by dynamic
%all rights reserved by www,matlabsky.cn
a=x0(x);b=x0(2);h1=H(1);h2=H(2);t=linspace(0,2*p,m);
x=a+R*cos(t);
y=b+R*sin(t);%以(a,b)为圆心,R为半径
z=linspace(h1,h2,n);%高度为[h1,h2]
xx=meshgrid(x,z);
yy=meshgrid(y,z);
zz=meshgrid(z,t)';
mesh(xx,yy,zz)
%绘制任意位置、大小的圆柱,但是对称轴平行与z轴
%x0=[a,b]圆心位置
%R圆柱半径
%H=[h1,h2]圆柱高度,h1为底圆的z坐标,h2为上圆的z坐标
%m圆方向的等分数
%n高度方向的等分数
%
%by dynamic
%all rights reserved by www,matlabsky.cn
a=x0(x);b=x0(2);h1=H(1);h2=H(2);t=linspace(0,2*p,m);
x=a+R*cos(t);
y=b+R*sin(t);%以(a,b)为圆心,R为半径
z=linspace(h1,h2,n);%高度为[h1,h2]
xx=meshgrid(x,z);
yy=meshgrid(y,z);
zz=meshgrid(z,t)';
mesh(xx,yy,zz)
通过两点绘制圆柱和圆台
如果想通过两点绘制自定义的圆柱或圆台的话,那么就需要自己编写成,并且需要较好的空间立体几何想象能力
但是万幸的是我们找了相关直接程序
1.过两点绘制圆柱http://www.matlabsky.net/thread-269-1-3.html
2.过两点绘制圆台http://www.matlabsky.net/thread-273-1-2.html
但是万幸的是我们找了相关直接程序
1.过两点绘制圆柱http://www.matlabsky.net/thread-269-1-3.html
2.过两点绘制圆台http://www.matlabsky.net/thread-273-1-2.html