matlab怎样绘制中心线为曲线的变截面圆柱?如图所示,我想画一个模拟井径的三维图像,其中心轨迹为一条曲线,知道曲线上若干个中心点位置处的圆的半径(点不同时,圆的半径也不同),不知道
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/31 06:51:38
![matlab怎样绘制中心线为曲线的变截面圆柱?如图所示,我想画一个模拟井径的三维图像,其中心轨迹为一条曲线,知道曲线上若干个中心点位置处的圆的半径(点不同时,圆的半径也不同),不知道](/uploads/image/z/10331367-15-7.jpg?t=matlab%E6%80%8E%E6%A0%B7%E7%BB%98%E5%88%B6%E4%B8%AD%E5%BF%83%E7%BA%BF%E4%B8%BA%E6%9B%B2%E7%BA%BF%E7%9A%84%E5%8F%98%E6%88%AA%E9%9D%A2%E5%9C%86%E6%9F%B1%3F%E5%A6%82%E5%9B%BE%E6%89%80%E7%A4%BA%2C%E6%88%91%E6%83%B3%E7%94%BB%E4%B8%80%E4%B8%AA%E6%A8%A1%E6%8B%9F%E4%BA%95%E5%BE%84%E7%9A%84%E4%B8%89%E7%BB%B4%E5%9B%BE%E5%83%8F%2C%E5%85%B6%E4%B8%AD%E5%BF%83%E8%BD%A8%E8%BF%B9%E4%B8%BA%E4%B8%80%E6%9D%A1%E6%9B%B2%E7%BA%BF%2C%E7%9F%A5%E9%81%93%E6%9B%B2%E7%BA%BF%E4%B8%8A%E8%8B%A5%E5%B9%B2%E4%B8%AA%E4%B8%AD%E5%BF%83%E7%82%B9%E4%BD%8D%E7%BD%AE%E5%A4%84%E7%9A%84%E5%9C%86%E7%9A%84%E5%8D%8A%E5%BE%84%EF%BC%88%E7%82%B9%E4%B8%8D%E5%90%8C%E6%97%B6%2C%E5%9C%86%E7%9A%84%E5%8D%8A%E5%BE%84%E4%B9%9F%E4%B8%8D%E5%90%8C%EF%BC%89%2C%E4%B8%8D%E7%9F%A5%E9%81%93)
matlab怎样绘制中心线为曲线的变截面圆柱?如图所示,我想画一个模拟井径的三维图像,其中心轨迹为一条曲线,知道曲线上若干个中心点位置处的圆的半径(点不同时,圆的半径也不同),不知道
matlab怎样绘制中心线为曲线的变截面圆柱?
如图所示,我想画一个模拟井径的三维图像,其中心轨迹为一条曲线,知道曲线上若干个中心点位置处的圆的半径(点不同时,圆的半径也不同),不知道怎样拟合出一个变形了的圆柱面呢?
matlab怎样绘制中心线为曲线的变截面圆柱?如图所示,我想画一个模拟井径的三维图像,其中心轨迹为一条曲线,知道曲线上若干个中心点位置处的圆的半径(点不同时,圆的半径也不同),不知道
%这里随便给了组数据,中心轨迹(x,y,z)以及对应的圆半径
x=0:0.02:1;y=cos(x*pi/2);z=y.^2;
r=0.15-0.1*x;
%这里x,y,z,r是程度相等的数组,注意相邻两点不能重合
plot3(x,y,z,'b');hold on
dx=gradient(x);dy=gradient(y);dz=gradient(z);%曲线方向增量
deg=0:360;
for ii=1:length(x)
n=[dx(ii) dy(ii) dz(ii)]; %n是当前点的增量方向,也是圆平面的法向量
n=n/sqrt(sum(n.^2)); %归一化法向量
a=zeros(1,3);[ind ind]=min(n);a(ind)=1;%找到和n(ii,:)不共线的向量
r1=cross(n,a); %产生圆平面上的一个向量
r1=r1/sqrt(sum(r1.^2))*r(ii); %让向量长度等于半径
r2=cross(n,r1); %产生另一个与其正交的半径向量
xx=r1(1)*cosd(deg)+r2(1)*sind(deg)+x(ii); %根据r1和r2,利用角度产生圆数据
yy=r1(2)*cosd(deg)+r2(2)*sind(deg)+y(ii);
zz=r1(3)*cosd(deg)+r2(3)*sind(deg)+z(ii);
plot3(xx,yy,zz,'r'); %画一个圆
end
hold off;grid on
axis equal;
升级版
%这里随便给了组数据,中心轨迹(x,y,z)以及对应的圆半径
x=0:0.02:1;y=cos(x*pi/2);z=y.^2;
r=0.15-0.1*x;
%这里x,y,z,r是程度相等的数组,注意相邻两点不能重合
x=x(:);y=y(:);z=z(:);
plot3(x,y,z,'b','linewidth',2);hold on
n=[gradient(x) gradient(y) gradient(z)];%曲线方向增量
n=bsxfun(@rdivide,n,sqrt(sum(n.^2,2)));
a=zeros(1,3);[ind ind]=min(n(1,:));a(ind)=1;
r1=cross(n(1,:),a);
r1=r1/sqrt(sum(r1.^2));
r2=cross(n(1,:),r1);
deg=0:20:360;
xx=r(1)*(r1(1)*cosd(deg)+r2(1)*sind(deg))+x(1);
yy=r(1)*(r1(2)*cosd(deg)+r2(2)*sind(deg))+y(1);
zz=r(1)*(r1(3)*cosd(deg)+r2(3)*sind(deg))+z(1);
d0=[xx(1) yy(1) zz(1)];
for ii=2:length(x)
r1=cross(r2,n(ii,:));
r2=cross(n(ii,:),r1);
xx=[xx;r(ii)*(r1(1)*cosd(deg)+r2(1)*sind(deg))+x(ii)];
yy=[yy;r(ii)*(r1(2)*cosd(deg)+r2(2)*sind(deg))+y(ii)];
zz=[zz;r(ii)*(r1(3)*cosd(deg)+r2(3)*sind(deg))+z(ii)];
end
mesh(xx,yy,zz);colormap([1 0 0]);
hold off;grid on;axis equal;hidden off;
xlabel('X');ylabel('Y');zlabel('Z');