FEM-Course-Matlab/16.几何非线性有限元matlab编程/几何非线性有限元-Williams frame/elemAngleIncr.m

42 lines
1.1 KiB
Mathematica
Raw Normal View History

2024-01-28 16:46:36 +00:00
function ang_incr = elemAngleIncr(Elem,U,d_U)
% ǰһ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>λ<EFBFBD><EFBFBD>=<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µij<EFBFBD>ʼλ<EFBFBD><EFBFBD>=<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD>ij<EFBFBD>ʼλ<EFBFBD><EFBFBD>
U_0 = U - d_U;
% <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD>ڵ<EFBFBD>λ<EFBFBD><EFBFBD>
dx1_0 = U_0(Elem.n1.dof(1));
dy1_0 = U_0(Elem.n1.dof(2));
dx2_0 = U_0(Elem.n2.dof(1));
dy2_0 = U_0(Elem.n2.dof(2));
% <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
x1_0 = Elem.n1.x + dx1_0;
y1_0 = Elem.n1.y + dy1_0;
x2_0 = Elem.n2.x + dx2_0;
y2_0 = Elem.n2.y + dy2_0;
% <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vx_0 = [x2_0-x1_0, y2_0-y1_0, 0];
% <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĽڵ<EFBFBD>λ<EFBFBD><EFBFBD>
dx1_1 = U(Elem.n1.dof(1));
dy1_1 = U(Elem.n1.dof(2));
dx2_1 = U(Elem.n2.dof(1));
dy2_1 = U(Elem.n2.dof(2));
%<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
x1_1 = Elem.n1.x + dx1_1;
y1_1 = Elem.n1.y + dy1_1;
x2_1 = Elem.n2.x + dx2_1;
y2_1 = Elem.n2.y + dy2_1;
% <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
vx_1 = [x2_1-x1_1, y2_1-y1_1, 0];
% <EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dir = cross(vx_0,vx_1);
ang_incr = atan2(norm(dir),dot(vx_0,vx_1));
% <EFBFBD>Ƕ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s = sign(dir(3));
ang_incr = s * ang_incr;
end