找回密码
 注册
Simdroid-非首页
查看: 73|回复: 2

求工作空间的边界

[复制链接]
发表于 2010-7-25 19:19:31 | 显示全部楼层 |阅读模式 来自 江苏南京
程序如下:
clear all;
clc;
tic;
A10=[-400/2;320/2;0];    %运动平台上各球铰点在动坐标系下的矢量表示
A20=[-400/2;-320/2;0];
A30=[0;-400/2;320/2];
A40=[0;-400/2;-320/2];
A50=[320/2;0;-400/2];
A60=[-320/2;0;-400/2];
T=[1 0 0;0 1 0;0 0 1]
C1=[-(400/2+500+400);320/2;0];        %各分支与基座连接点在定坐标系下的矢量表示
C2=[-(400/2+500+400);-320/2;0];
C3=[0;-(400/2+500+400);320/2];
C4=[0;-(400/2+500+400);-320/2];
C5=[320/2;0;-(400/2+500+400)];
C6=[-320/2;0;-(400/2+500+400)];
k=1;
xdata=0;
ydata=0;
    for r=0:10:300
        for a=0:2*pi/100:2*pi
        x=r*cos(a);
        y=r*sin(a);
         
A1=T*A10+[x;y;0];
A2=T*A20+[x;y;0];
A3=T*A30+[x;y;0];
A4=T*A40+[x;y;0];
A5=T*A50+[x;y;0];
A6=T*A60+[x;y;0];
l1=500+x-sqrt(500^2-y^2-0^2);
l2=500+x-sqrt(500^2-y^2-0^2);
l3=500+y-sqrt(500^2-x^2-0^2);
l4=500+y-sqrt(500^2-x^2-0^2);
l5=500+0-sqrt(500^2-x^2-y^2);
l6=500+0-sqrt(500^2-x^2-y^2);

B1=[-(400/2+500-l1);320/2;0];        %虎可铰各点在固定坐标系下的矢量表示
B2=[ -(400/2+500-l2);-320/2;0];
B3=[0;-(400/2+500-l3);320/2];
B4=[0;-(400/2+500-l4);-320/2];
B5=[320/2;0;-(400/2+500-l5)];   
B6=[-320/2;0;-(400/2+500-l6)];
zeta1=(B1-A1)/500;
zeta2=(B2-A2)/500;
zeta3=(B3-A3)/500;      
zeta4=(B4-A4)/500;        
zeta5=(B5-A5)/500;         
zeta6=(B6-A6)/500;

eta1=(C1-B1)/abs(400+l1);         
eta2=(C2-B2)/abs(400+l2);        
eta3=(C3-B3)/abs(400+l3);         
eta4=(C4-B4)/abs(400+l4);         
eta5=(C5-B5)/abs(400+l5);
eta6=(C6-B6)/abs(400+l6);

delta1=acos(dot(zeta1,T*eta1));
delta2=acos(dot(zeta2,T*eta2));
delta3=acos(dot(zeta3,T*eta3));
delta4=acos(dot(zeta4,T*eta4));
delta5=acos(dot(zeta5,T*eta5));
delta6=acos(dot(zeta6,T*eta6));

   theta1=acos(dot(zeta1,eta1));
   theta2=acos(dot(zeta2,eta2));   
   theta3=acos(dot(zeta3,eta3));  
   theta4=acos(dot(zeta4,eta4));
   theta5=acos(dot(zeta5,eta5));
   theta6=acos(dot(zeta6,eta6));
   
if if ((l1>=-200)&(l1<=200)&(l2>=-200)&(l2<=200)&(l3>=-200)&(l3<=200)&(l4>=-200)&(l4<=200)&(l5>=-200)&(l5<=200)&(l6>=-200)&(l6<=200)&(delta1>=0)&(delta1<=pi/6)&(delta2>=0)&(delta2<=pi/6)&(delta3>=0)&(delta3<=pi/6)&(delta4>=0)&(delta4<=pi/6)&(delta5>=0)&(delta5<=pi/6)&(delta6>=0)&(delta6<=pi/6)&(theta1>=0)&(theta1<=pi/6)&(theta2>=0)&(theta2<=pi/6)&(theta3>=0)&(theta3<=pi/6)&(theta4>=0)&(theta4<=pi/6)&(theta5>=0)&(theta5<=pi/6)&(theta6>=0)&(theta6<=pi/6))
     xdata(k)=x;
     ydata(k)=y;
     k=k+1;
end
        end
    end
toc
plot(xdata,ydata)
   
     xlabel('x/mm');ylabel('y/mm')
如果只要此程序仿真出的工作空间的边界,应该怎么修改程序啊?谁能帮我一下吗?
发表于 2011-9-5 11:01:40 | 显示全部楼层 来自 黑龙江佳木斯
Simdroid开发平台
楼主,交流一下吧QQ68196541
回复 不支持

使用道具 举报

发表于 2011-9-5 15:39:16 | 显示全部楼层 来自 江苏南京
你贴得程序似乎多了个 if 。如果我没理解错的的话,你只要在上述程序结尾加上以下代码即可:
hold on
b_id = convhull(xdata,ydata);
b_x = xdata(b_id); % 边界点x坐标
b_y = ydata(b_id); % 边界点y坐标
plot(b_x, b_y, 'r-', 'LineWidth', 2);

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-17 06:06 , Processed in 0.034512 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表