有JMS懂MATLAB的么,帮一下忙

打印

1414条/页,1页

1
您是第734位读者

楼主 肯德基2008/5/20 20:37:00

我现在要弄一个程序

可我没学过哈,现在要学也来不及了

就是

>> x1=1;x2=2;x3=3;y1=1;y2=2;y3=3;z1=1;z2=2;z3=3

z3 =

???? 3

>> x=[x1 y1 z1]

x =

???? 1???? 1???? 1

>> y=[x2 y2 z2]

y =

???? 2???? 2???? 2

>> z=[x3 y3 z3]

z =

???? 3???? 3???? 3

??? Input argument 'x1' is undefined.

Error in ==> C:\MATLAB6p5\work\ALINE.M
On line 2? ==> L=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2);

??? Input argument 'y1' is undefined.

Error in ==> C:\MATLAB6p5\work\CIRCLE3.M
On line 10? ==> l=(y1-y3)*(z2-z3)-(y2-y3)*(z1-z3);

??? Input argument 'y2' is undefined.

Error in ==> C:\MATLAB6p5\work\PLAN.M
On line 4? ==> if (y2-y1)*(z3- z1)-(y3-y1)*(z2-z1)+(x3-x1)*(z2-z1)-(x2-x1)*(z3-z1)+(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)==0
为什么老出错,它说我没定义是怎么回事?

2 ==2008/5/20 21:50:00

你这是啥啊

程序不全啊

很简单啊看上去,没什么东西,就是矩阵的运算哇

你要干吗啊

3 肯德基2008/5/20 22:00:00

它老说我没定义是啥意思?

我要怎么定义

4 肯德基2008/5/20 22:01:00

这个就是我自己试着定义完了以后

我就运行了我要运行的这个程序

function aline(x1,y1,z1,x2,y2,z2)
L=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2);
T=0.25;v=1;
d=v*T;
N=round(L/d)+1;
x0=(x2-x1)/N;
y0=(y2-y1)/N;
z0=(z2-z1)/N;
for i=1:N+1
??? X(i)=x1+(i-1)*x0;
??? Y(i)=y1+(i-1)*y0;
??? Z(i)=z1+(i-1)*z0;
end
plot3(X,Y,Z,x1,y1,z1,'rx',x2,y2,z2,'ro')
xlabel('x')
ylabel('y')
zlabel('z')
grid

结果它就输出

Input argument 'x1' is undefined.

Error in ==> C:\MATLAB6p5\work\ALINE.M
On line 2? ==> L=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2);

??? Input argument 'y1' is undefined.

Error in ==> C:\MATLAB6p5\work\CIRCLE3.M
On line 10? ==> l=(y1-y3)*(z2-z3)-(y2-y3)*(z1-z3);

??? Input argument 'y2' is undefined.

Error in ==> C:\MATLAB6p5\work\PLAN.M
On line 4? ==> if (y2-y1)*(z3- z1)-(y3-y1)*(z2-z1)+(x3-x1)*(z2-z1)-(x2-x1)*(z3-z1)+(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)==0

5 ----------2008/5/20 22:23:00

ni yao zai cheng xu li ding yi "x1"

zai "function aline(x1,y1,z1,x2,y2,z2)"hou yi hang xie "x1=...."

6 ^^2008/5/20 22:27:00

以前别的程序有没有运行成功?

7 看不懂2008/5/20 22:28:00

MATLAB我都是补考两次还作弊通过的

没法帮你

8 2008/5/20 22:30:00

只用MATLAB学过图像处理的人票风

看起来好像是在说你么定义啊……

不过MATLAB很EX的,多打一个空格都会提示出错,如果是复制代码的话要小心全角半角和空格。

9 - -2008/5/20 22:39:00

我来用MATLAB给你运行一下先~

10 默哀2008/5/20 22:41:00

数据格式吧

format long short之类的

x,y,z都没有定义格式

11 - -2008/5/20 22:49:00

LZ我把function aline(x1,y1,z1,x2,y2,z2)去掉后就运行成功了,虽然我不知道为什么= =估计还是函数定义不对~

出来的是一个图像,你做的是图像处理?我做的是LDPC编码= =

12 先用clc清空一下2008/5/20 22:51:00

RID

然后执行这段代码,代码没有问题,可以运行的

??? by? 已经很晚了还在实验室泡着一枚

13 肯德基2008/5/20 23:28:00

11L,我听你的把它删了以后果然出来了

谢谢哈,我还厚着脸皮再问第二个程序咋弄?

第二个程序是这个,就是要接着第一个做的

function circle3(x1,y1,z1,x2,y2,z2,x3,y3,z3,V)
%过空间不共线三点画圆弧
% V 是机器人最大线速度

%空间三点 P1,P2,P3 所在平面为 M
%过 P1P2 中点且与 P1P2 垂直的平面为 T
%过 P2P3 中点且与 P2P3 垂直的平面为 S
%联立 M,T,S 三平面可求出圆心及半径
% M 平面的法矢量的方向数为 l,m,n
l=(y1-y3)*(z2-z3)-(y2-y3)*(z1-z3);
m=(x2-x3)*(z1-z3)-(x1-x3)*(z2-z3);
n=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3);
a=l*x3+m*y3+n*z3;
b=(x2^2+y2^2+z2^2-x1^2-y1^2-z1^2)/2;
c=(x3^2+y3^2+z3^2-x2^2-y2^2-z2^2)/2;
A(1,1)=l;A(1,2)=m;A(1,3)=n;
A(2,1)=x2-x1;A(2,3)=z2-z1;A(2,2)=y2-y1;
A(3,1)=x3-x2;A(3,2)=y3-y2;A(3,3)=z3-z2;
B(1,1)=a;B(2,1)=b;B(3,1)=c;
X=A\B;

x0=X(1,1);
y0=X(2,1);
z0=X(3,1);
r=sqrt((x1-x0)^2+(y1-y0)^2+(z1-z0)^2);

%坐标变换将三维空间圆弧变换到二维平面的圆弧
%以平面 M 法矢量方向作为新坐标系的 Z0 轴方向,方向余弦为
kf=sqrt(l^2+m^2+n^2);
ax=l/kf;
ay=m/kf;
az=n/kf;
%以 P0P1 方向作为新坐标系的 X0 轴方向,方向余弦为
fa=sqrt((x1-x0)^2+(y1-y0)^2+(z1-z0)^2);
nx=(x1-x0)/fa;
ny=(y1-y0)/fa;
nz=(z1-z0)/fa;
% Y0 轴方向余弦为
ox=ay*nz-az*ny;
oy=az*nx-ax*nz;
oz=ax*ny-ay*nx;
% A 为坐标变换矩阵
A(1,1)=nx;A(1,2)=ox;A(1,3)=ax;A(1,4)=x0;
A(2,1)=ny;A(2,2)=oy;A(2,3)=ay;A(2,4)=y0;
A(3,1)=nz;A(3,2)=oz;A(3,3)=az;A(3,4)=z0;A(4,4)=1;
AA=inv(A);
P1(1,1)=x1;P1(2,1)=y1;P1(3,1)=z1;
P2(1,1)=x2;P2(2,1)=y2;P2(3,1)=z2;
P3(1,1)=x3;P3(2,1)=y3;P3(3,1)=z3;
P1(4,1)=1;P2(4,1)=1;P3(4,1)=1;

Q1=AA*P1;
Q2=AA*P2;
Q3=AA*P3;
% P1,P2,P3 三点的新坐标值
xx1=Q1(1,1);xx2=Q2(1,1);xx3=Q3(1,1);
yy1=Q1(2,1);yy2=Q2(2,1);yy3=Q3(2,1);
zz1=Q1(3,1);zz2=Q2(3,1);zz3=Q3(3,1);
%求 P0Q1 与 P0Q2 之间的夹角theta1,P0Q2 与 P0Q3 之间的夹角theta2
theta1=acos((2*r^2-(xx2-xx1)^2-(yy1-yy2)^2)/(2*r^2));
theta2=acos((2*r^2-(xx2-xx3)^2-(yy3-yy2)^2)/(2*r^2));
a1(1,1)=xx1;a1(1,2)=yy1;a1(1,3)=zz1;
a2(1,1)=xx2;a2(1,2)=yy2;a2(1,3)=zz2;
b1(1,1)=xx2;b1(1,2)=yy2;b1(1,3)=zz2;
b2(1,1)=xx3;b2(1,2)=yy3;b2(1,3)=zz3;
a=cross(a1,a2);b=cross(b1,b2);
c=dot(a,b);
% 判定圆弧揷补方向,f=-1顺时针,f=1逆时针
f=1;
if c==0
??? if theta1==pi
??????? if yy3>0
??????????? f=-1;
??????? end
??? else
??????? if yy2<0
??????????? f=-1;
??????? end
??? end
???
else
? if c>0
????? if yy2<0
????????? f=-1;
????? end
? else
????? if yy2<0
??? theta1=2*pi-theta1;
???? else
??? theta2=2*pi-theta2;
???? end
??? if yy3>0
??????? f=-1;
??? end
?
?end
end

theta=theta1+theta2;
%进行圆弧揷补
T1=0.025;
theta0=T1*V/r;
N=round(theta/theta0)+1;
f1=0;
xi=xx1;yi=yy1;
for i=1:N+1
??? if f1>theta
??????? theta0=theta-(f1-theta0);
??? end??
??? X(i)=xi;
??? Y(i)=yi;
???
??? xj=xi*cos(theta0)-yi*sin(theta0);
??? yj=(yi*cos(theta0)+xi*sin(theta0))*f;
??? xi=xj;
??? yi=yj;??
??? f1=f1+theta0;
%将揷补点转换到基坐标系下
B(1,1)=xi;B(2,1)=yi;B(3,1)=0;B(4,1)=1;
C=A*B;
xt(i)=C(1,1);
yt(i)=C(2,1);
zt(i)=C(3,1);
i=i+1;
end
plot3(xt,yt,zt,x1,y1,z1,'ro',x2,y2,z2,'r+',x3,y3,z3,'r*',x0,y0,z0,'rx')
grid
xlabel('x');
ylabel('y');
zlabel('z');


我刚试过把function circle3(x1,y1,z1,x2,y2,z2,x3,y3,z3,V)删了

但没用

14 肯德基2008/5/20 23:28:00

11L,我听你的把它删了以后果然出来了

谢谢哈,我还厚着脸皮再问第二个程序咋弄?

第二个程序是这个,就是要接着第一个做的

function circle3(x1,y1,z1,x2,y2,z2,x3,y3,z3,V)
%过空间不共线三点画圆弧
% V 是机器人最大线速度

%空间三点 P1,P2,P3 所在平面为 M
%过 P1P2 中点且与 P1P2 垂直的平面为 T
%过 P2P3 中点且与 P2P3 垂直的平面为 S
%联立 M,T,S 三平面可求出圆心及半径
% M 平面的法矢量的方向数为 l,m,n
l=(y1-y3)*(z2-z3)-(y2-y3)*(z1-z3);
m=(x2-x3)*(z1-z3)-(x1-x3)*(z2-z3);
n=(x1-x3)*(y2-y3)-(x2-x3)*(y1-y3);
a=l*x3+m*y3+n*z3;
b=(x2^2+y2^2+z2^2-x1^2-y1^2-z1^2)/2;
c=(x3^2+y3^2+z3^2-x2^2-y2^2-z2^2)/2;
A(1,1)=l;A(1,2)=m;A(1,3)=n;
A(2,1)=x2-x1;A(2,3)=z2-z1;A(2,2)=y2-y1;
A(3,1)=x3-x2;A(3,2)=y3-y2;A(3,3)=z3-z2;
B(1,1)=a;B(2,1)=b;B(3,1)=c;
X=A\B;

x0=X(1,1);
y0=X(2,1);
z0=X(3,1);
r=sqrt((x1-x0)^2+(y1-y0)^2+(z1-z0)^2);

%坐标变换将三维空间圆弧变换到二维平面的圆弧
%以平面 M 法矢量方向作为新坐标系的 Z0 轴方向,方向余弦为
kf=sqrt(l^2+m^2+n^2);
ax=l/kf;
ay=m/kf;
az=n/kf;
%以 P0P1 方向作为新坐标系的 X0 轴方向,方向余弦为
fa=sqrt((x1-x0)^2+(y1-y0)^2+(z1-z0)^2);
nx=(x1-x0)/fa;
ny=(y1-y0)/fa;
nz=(z1-z0)/fa;
% Y0 轴方向余弦为
ox=ay*nz-az*ny;
oy=az*nx-ax*nz;
oz=ax*ny-ay*nx;
% A 为坐标变换矩阵
A(1,1)=nx;A(1,2)=ox;A(1,3)=ax;A(1,4)=x0;
A(2,1)=ny;A(2,2)=oy;A(2,3)=ay;A(2,4)=y0;
A(3,1)=nz;A(3,2)=oz;A(3,3)=az;A(3,4)=z0;A(4,4)=1;
AA=inv(A);
P1(1,1)=x1;P1(2,1)=y1;P1(3,1)=z1;
P2(1,1)=x2;P2(2,1)=y2;P2(3,1)=z2;
P3(1,1)=x3;P3(2,1)=y3;P3(3,1)=z3;
P1(4,1)=1;P2(4,1)=1;P3(4,1)=1;

Q1=AA*P1;
Q2=AA*P2;
Q3=AA*P3;
% P1,P2,P3 三点的新坐标值
xx1=Q1(1,1);xx2=Q2(1,1);xx3=Q3(1,1);
yy1=Q1(2,1);yy2=Q2(2,1);yy3=Q3(2,1);
zz1=Q1(3,1);zz2=Q2(3,1);zz3=Q3(3,1);
%求 P0Q1 与 P0Q2 之间的夹角theta1,P0Q2 与 P0Q3 之间的夹角theta2
theta1=acos((2*r^2-(xx2-xx1)^2-(yy1-yy2)^2)/(2*r^2));
theta2=acos((2*r^2-(xx2-xx3)^2-(yy3-yy2)^2)/(2*r^2));
a1(1,1)=xx1;a1(1,2)=yy1;a1(1,3)=zz1;
a2(1,1)=xx2;a2(1,2)=yy2;a2(1,3)=zz2;
b1(1,1)=xx2;b1(1,2)=yy2;b1(1,3)=zz2;
b2(1,1)=xx3;b2(1,2)=yy3;b2(1,3)=zz3;
a=cross(a1,a2);b=cross(b1,b2);
c=dot(a,b);
% 判定圆弧揷补方向,f=-1顺时针,f=1逆时针
f=1;
if c==0
??? if theta1==pi
??????? if yy3>0
??????????? f=-1;
??????? end
??? else
??????? if yy2<0
??????????? f=-1;
??????? end
??? end
???
else
? if c>0
????? if yy2<0
????????? f=-1;
????? end
? else
????? if yy2<0
??? theta1=2*pi-theta1;
???? else
??? theta2=2*pi-theta2;
???? end
??? if yy3>0
??????? f=-1;
??? end
?
?end
end

theta=theta1+theta2;
%进行圆弧揷补
T1=0.025;
theta0=T1*V/r;
N=round(theta/theta0)+1;
f1=0;
xi=xx1;yi=yy1;
for i=1:N+1
??? if f1>theta
??????? theta0=theta-(f1-theta0);
??? end??
??? X(i)=xi;
??? Y(i)=yi;
???
??? xj=xi*cos(theta0)-yi*sin(theta0);
??? yj=(yi*cos(theta0)+xi*sin(theta0))*f;
??? xi=xj;
??? yi=yj;??
??? f1=f1+theta0;
%将揷补点转换到基坐标系下
B(1,1)=xi;B(2,1)=yi;B(3,1)=0;B(4,1)=1;
C=A*B;
xt(i)=C(1,1);
yt(i)=C(2,1);
zt(i)=C(3,1);
i=i+1;
end
plot3(xt,yt,zt,x1,y1,z1,'ro',x2,y2,z2,'r+',x3,y3,z3,'r*',x0,y0,z0,'rx')
grid
xlabel('x');
ylabel('y');
zlabel('z');


我刚试过把function circle3(x1,y1,z1,x2,y2,z2,x3,y3,z3,V)删了

但没用

跳转→首页主版外传 黑犬J禁万能站务Johnnys-BBS图志 photo购物 shopping

1414条/页,1页

1
ZB回复请先登录