matlab 绘制任意方向和位置的空间圆柱体
function cylinder3(X1,X2,r,color)
%一个简单的例子:cylinder3([1 2 3],[7 8 9],2,'b');两个空间点位置,半径,颜色
length_cyl=norm(X2-X1);
[x,y,z]=cylinder(r,100);
z=z*length_cyl;
%绘制两个底面
hold on;
EndPlate1=fill3(x(1,:),y(1,:),z(1,:),'r');
EndPlate2=fill3(x(2,:),y(2,:),z(2,:),'r');
Cylinder=mesh(x,y,z);
%计算圆柱体旋转的角度
unit_V=[0 0 1];
angle_X1X2=acos(dot( unit_V,(X2-X1) )/( norm(unit_V)*norm(X2-X1)) )*180/pi;
%计算旋转轴
if angle_X1X2==180
axis_rot=[1 0 0];
else
axis_rot=cross(unit_V,(X2-X1));
end
%将圆柱体旋转到期望方向
if angle_X1X2~=0 % Rotation is not needed if required direction is along X
rotate(Cylinder,axis_rot,angle_X1X2,[0 0 0])
rotate(EndPlate1,axis_rot,angle_X1X2,[0 0 0])
rotate(EndPlate2,axis_rot,angle_X1X2,[0 0 0