【MATLAB 画斜圆柱】

MATLAB 画斜圆柱

内容介绍

MATLAB中并没有直接画斜圆柱的方法,我百度了一下,解决方案是用齐次矩阵做坐标变换,然后用fill3、surf函数画变换后的点。我改写了一下百度到的代码,因为源代码写的有点……功能单一。原理就不多介绍了,下面先看效果。

效果

这里用了图片编辑器里面的相机工具来增强画面的质感,可以自己调,也可以百度一下怎么在代码里面加,我比较懒就没去查了。
请添加图片描述请添加图片描述

代码

代码能力有限,如果有更好更高效的的写法可以帮我更新一下,记得@我学习一下,谢谢。
代码片.


function  Getcolumn(axis,r)
%Getcolumn 此函数为画一般圆柱
%   axis:轴线上的端点坐标,n*6 [plx ply plz pux puy puz;...],n为圆柱的个数
%   r:   圆柱的半径,1*n
column_num = size(axis,1);%圆柱数量

Hight = sqrt(sum((axis(:,1:3)-axis(:,4:6)).*(axis(:,1:3)-axis(:,4:6)),2)); % 各个圆柱的高度 n*1
axis_vec = (axis(:,4:6) - axis(:,1:3))./Hight;  % 各个圆柱的单位向量  n*3

% 获取转换矩阵
for i = 1:column_num
    avi = axis_vec(i,:);    
    trans(:,:,i) = [ [null(avi) avi' axis(i,1:3)'];0 0 0 1 ];
end

% 标准圆柱面的点云
x = repmat(cos((1:50)*2*pi/50),column_num,1).*r'; % n*50
y = repmat(sin((1:50)*2*pi/50),column_num,1).*r'; % n*50
z = ones(column_num,50).*Hight;                   % n*50

x = [x x(:,1)];
y = [y y(:,1)];
z = [z z(:,1)];

for i = 1:column_num
    lp(:,:,i) = trans(:,:,i)*[x(i,:);y(i,:);zeros(1,51);ones(1,51)];
    up(:,:,i) = trans(:,:,i)*[x(i,:);y(i,:);z(i,:);ones(1,51)];
end

point_cloud = [lp;up];

% 绘图
color = rand(column_num,3);%不想要随机颜色的话可以自己根据圆柱的数量自己一个一个的设置,但比较麻烦。
for j = 1:column_num
    s = surf([point_cloud(1,:,j);point_cloud(5,:,j)],[point_cloud(2,:,j);...
        point_cloud(6,:,j)],[point_cloud(3,:,j);point_cloud(7,:,j)],'FaceColor',color(j,:));
    s.EdgeColor = 'none';
    hold on
    fill3(point_cloud(1,:,j),point_cloud(2,:,j),point_cloud(3,:,j),color(j,:));
    fill3(point_cloud(5,:,j),point_cloud(6,:,j),point_cloud(7,:,j),color(j,:));
end
hold off


end
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值