MATLAB離散點邊界曲線的繪製
阿新 • • 發佈:2018-12-20
一大堆離散點有時候需要繪製邊緣點,這時候可以用到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;
散點圖上的效果是這樣的:
分離出來就是這樣: