1. 程式人生 > >MATLAB離散點邊界曲線的繪製

MATLAB離散點邊界曲線的繪製

一大堆離散點有時候需要繪製邊緣點,這時候可以用到boundary函式,這是MATLAB的自帶函式,用機械臂的工作空間為例繪製邊界曲線圖:

%建立機器人模型
%       theta    d        a        alpha     offset
L1=Link([0       0        2   0      0     ]); %定義連桿的D-H引數
L2=Link([0       0        1.8     0         0     ]);
L3=Link([0       0         0.8    0     0     ]);
%  L4=Link([0       0        1    0     0     ]);
%  L5=Link([0       0        2    0     0     ]);
%  L6=Link([0       0        2    0     0     ]);
robot=SerialLink([L1 L2 L3  ],'name','manman'); %連線連桿,機器人取名manman
A=unifrnd(-pi,pi/2,[1,30000]);%第一關節變數限位
B=unifrnd(-pi/2,pi/2,[1,30000]);%第二關節變數限位
C=unifrnd(-pi,pi,[1,30000]);%第三關節變數限位
G= cell(30000, 3);%建立元胞陣列
for n = 1:30000
    G{n} =[A(n) B(n) C(n)];
end                                         %產生3000組隨機點
H1=cell2mat(G);                       %將元胞陣列轉化為矩陣
T=double(robot.fkine(H1));       %機械臂正解
figure(1)
sz=10;
scatter3(squeeze(T(1,4,:)),squeeze(T(2,4,:)),squeeze(T(3,4,:)),sz,'filled','b')%隨機點圖
robot.plot([pi/2 pi/4 0],'workspace',[-5 5 -5 5 -5 5 ],'tilesize',2)%機械臂圖
hold on;
x=squeeze(T(1,4,:));
y=squeeze(T(2,4,:));
k=boundary(x,y);
[theta,rho]=cart2pol(x,y);
% 把內部轉化為外部
rho1=max(rho)-rho;
theta1=theta;
% 極座標化為柱座標
[x1,y1]=pol2cart(theta1,rho1);
% 內部邊界索引
Ind1=boundary(x1,y1);
figure(2)
plot(x(Ind1),y(Ind1),'r','LineWidth',3)
hold on;
plot(x(k),y(k),'r','LineWidth',3)
hold on;

散點圖上的效果是這樣的:

在這裡插入圖片描述

分離出來就是這樣: 在這裡插入圖片描述