?? readoriginsdata.m
字號:
% 讀入數據結構,即給定多體系統信息
function ReadOriginsData(fname)
% 聲明全局變量
GlobalVariables
rfid = fopen(fname,'r');
% 物體個數 0號物體的位置
[nBodies,origin(1:3)]= RFile(rfid,2,[1,3]);
% 讀入有關物體的性質
for i=1:nBodies
% 物體序號
body(i).index=RFile(rfid,1,1);
index=body(i).index;
% 初始化新物體、連接鉸的性質
NewBodyJoint;
% 讀入新物體相對內接坐標系的初始方位
[body(index).x(1),body(index).ch(1),body(index).x(2),body(index).ch(2),body(index).x(3),body(index).ch(3)]=RFile(rfid,6,[1,1,1,1,1,1]);
% 局部坐標系的方位,形成初始變換矩陣,值用角度表示,相對自身原始位置的變換矩陣?
if body(index).x(1)~=0
x1=body(index).ch(1)*(pi/180);
x2=body(index).ch(2)*(pi/180);
x3=body(index).ch(3)*(pi/180);
[body(i).translate1,p1,p2,p3,p4]=RotateC(body(index).x(1),body(index).x(2),body(index).x(3),x1,x2,x3);
else
body(i).translate1=diag(ones(3,1),0);
end
% 物體的轉動慣量
[body(index).ii(1,1:3),body(index).ii(2,1:3),body(index).ii(3,1:3)]=RFile(rfid,3,[3,3,3]);
% 物體的質量,質心可能沒用。物體的質心在局部坐標系下的位置
[body(index).mm,body(index).mpoint1(1:3)]=RFile(rfid,2,[1,3]);
% 外接物體號
body(index).outnumber=RFile(rfid,1,1);
% 對該物體輸入外力、外力矩、內力、內力矩
[body(index).gf(1:3),body(index).mf(1:3),body(index).fi(1:3),body(index).mi(1:3)]=RFile(rfid,4,[3,3,3,3]);
% 讀入連接該物體的鉸的有關性質
% 鉸的標號
joint(i).number=RFile(rfid,1,1);
index=joint(i).number;
% 施于該連接鉸的鉸力和鉸力矩
[joint(index).fa(1:3),joint(index).ma(1:3)]=RFile(rfid,2,[3,3]);
% 該鉸的內接物體號,鉸在內接物體的位置,鉸在外接物體的位置
[joint(index).inbody,joint(index).inpo(1:3),joint(index).outpo(1:3)]=RFile(rfid,3,[1,3,3]);
% 鉸的性質號1-2-3-轉動,4-5-6平動
joint(index).index=RFile(rfid,1,1);
if joint(index).index==1
% wi()是此刻的方向,m(i)為轉軸的方向數,1-x軸,2-y軸,3-z軸,q(i)為轉速大小
joint(index).rofree=1;
[joint(index).wi(1:3),joint(index).m(1),joint(index).q(1)]=RFile(rfid,3,[3,1,1]);
elseif joint(index).index==2
joint(index).rofree=2;
[joint(index).wi(1:3),joint(index).m(1),joint(index).q(1),joint(index).m(2),joint(index).q(2)]=RFile(rfid,5,[3,1,1,1,1]);
elseif joint(index).index==3
joint(index).rofree=3;
[joint(index).wi(1:3),joint(index).m(1),joint(index).q(1),joint(index).m(2),joint(index).q(2),joint(index).m(3),joint(index).q(3)]=RFile(rfid,7,[3,1,1,1,1,1,1]);
elseif joint(index).index==4
% ri()是此刻的位置,速度大小,速度方向在其內接物體坐標系下表示
joint(index).trfree=1;
[joint(index).ri(1:3),joint(index).z(1),joint(index).kk1(1:3)]=RFile(rfid,3,[3,1,3]);
elseif joint(index).index==6
joint(index).trfree=3;
joint(index).rofree=3;
[joint(index).ri(1:3),joint(index).wi(1:3),joint(index).z(1),joint(index).kk1(1:3),joint(index).z(2),joint(index).kk2(1:3),joint(index).z(3),joint(index).kk3(1:3),...
joint(index).m(1),joint(index).q(1),joint(index).m(2),joint(index).q(2),joint(index).m(3),joint(index).q(3)]=RFile(rfid,14,[3,3,1,3,1,3,1,3,1,1,1,1,1,1]);
end
end % 讀入有關物體的性質結束
% 此時刻即初始時刻鉸的角度弧度化
for i=1:nBodies
joint(i).wi=joint(i).wi*pi/180;
end
% 計算系統的自由度
allFreeNum=0; % 總自由度數
rotFreeNum=0; % 旋轉自由度
transJointsNum=0; % 平動鉸個數
rotJointsNum=0; % 旋轉鉸個數
for i=1:nBodies
allFreeNum=allFreeNum+joint(i).trfree+joint(i).rofree;
if joint(i).trfree~=0
transJointsNum=transJointsNum+1;
end
rotFreeNum=rotFreeNum+joint(i).rofree;
if joint(i).rofree~=0
rotJointsNum=rotJointsNum+1;
end
end
% 如果有力元 ,1-有力元,0-沒有力元
nef=RFile(rfid,1,1);
ef=0;
if nef~=0
for i=1:nef
% 力的大小 內接和外接物體的個數 內接物體的位置 外接物體的位置
[ef(i).f(1:3),ef(i).ek,ef(i).eek,ef(i).cek(1:3),ef(i).ceek(1:3)]=RFile(rfid,5,[3,1,3,3,3]);
end
end
% 外力力矩和力矩大小
% 外力的個數
nfor=RFile(rfid,1,1);
if nfor~=0
for i=1:nfor
[for1(i).index,for1(i).dx(1:3),for1(i).po(1:3)]=RFile(rfid,3,[1,3,3]);
kk1=for1(i).index;
body(kk1).gf=body(kk1).gf+for1(i).dx;
end
end
% pos記錄b0到bi物體的路上所有元素,pos(1)...pos(n)記錄最后一元素在數組中的位置,其后為各物體序號.
% po記錄第i物體在總體矩陣ttoal的的位置 % 如1-2個平動1個轉動,2-3個平動2個轉動,則po(1)=3,po(2)=8 % po(i) 記錄第i物體自由度的最末位置 ?
po(nBodies)=0;
l=0;
for i=1:nBodies
l=joint(i).trfree+joint(i).rofree+l;
po(i)=l;
end
fclose(rfid);
'☆ 讀入數據結構,即給定多體系統信息程序 ReadOriginsData.m 運行結束 √'
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -