function varargout = Force_1(varargin) % FORCE_1 M-file for Force_1.fig % FORCE_1, by itself, creates a new FORCE_1 or raises the existing % singleton*. % % H = FORCE_1 returns the handle to a new FORCE_1 or the handle to % the existing singleton*. % % FORCE_1('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in FORCE_1.M with the given input arguments. % % FORCE_1('Property','Value',...) creates a new FORCE_1 or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before Force_1_OpeningFunction gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to Force_1_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Copyright 2002-2003 The MathWorks, Inc. % Edit the above text to modify the response to help Force_1 % Last Modified by GUIDE v2.5 19-Feb-2009 19:44:21 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @Force_1_OpeningFcn, ... 'gui_OutputFcn', @Force_1_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before Force_1 is made visible. function Force_1_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to Force_1 (see VARARGIN)
% Choose default command line output for Force_1 handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes Force_1 wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = Force_1_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure varargout{1} = handles.output; function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double input = str2num(get(hObject,'String')); if(isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double input = str2num(get(hObject,'String')); if(isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); % --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit3_Callback(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit3 as text % str2double(get(hObject,'String')) returns contents of edit3 as a double input = str2num(get(hObject,'String')); if(isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); % --- Executes during object creation, after setting all properties. function edit3_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit4_Callback(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit4 as text % str2double(get(hObject,'String')) returns contents of edit4 as a double input = str2num(get(hObject,'String')); if(isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); % --- Executes during object creation, after setting all properties. function edit4_CreateFcn(hObject, eventdata, handles) % hObject handle to edit4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit5_Callback(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit5 as text % str2double(get(hObject,'String')) returns contents of edit5 as a double input = str2num(get(hObject,'String')); if(isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); % --- Executes during object creation, after setting all properties. function edit5_CreateFcn(hObject, eventdata, handles) % hObject handle to edit5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit6_Callback(hObject, eventdata, handles) % hObject handle to edit6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit6 as text % str2double(get(hObject,'String')) returns contents of edit6 as a double input = str2num(get(hObject,'String')); if(isempty(input)) set(hObject,'String','0') end guidata(hObject,handles); % --- Executes during object creation, after setting all properties. function edit6_CreateFcn(hObject, eventdata, handles) % hObject handle to edit6 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) a1=get(handles.edit1,'String'); if(isempty(a1)) rox=0; else rox=str2num(a1); end a2=get(handles.edit2,'String'); if(isempty(a2)) roy=0; else roy=str2num(a2); end a3=get(handles.edit3,'String'); if(isempty(a3)) roz=0; else roz=str2num(a3); end a4=get(handles.edit4,'String'); if(isempty(a4)) xx=0; else xx=str2num(a4); end a5=get(handles.edit5,'String'); if(isempty(a5)) yy=0; else yy=str2num(a5); end a6=get(handles.edit6,'String'); if(isempty(a6)) zz=0; else zz=str2num(a6); end d=[xx,yy,zz]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % compute rotational matrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% rox=rox*3.1416/180; roy=roy*3.1416/180; roz=roz*3.1416/180; % rotational matrix Rox=[1,0,0; 0, cos(rox),-sin(rox);0,sin(rox), cos(rox)]; Roy=[cos(roy),0,sin(roy); 0, 1, 0; -sin(roy),0, cos(roy)]; Roz=[cos(roz), -sin(roz), 0; sin(roz), cos(roz), 0; 0, 0,1]; R=Roz*Roy*Rox-eye(3,3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define local system related to ABAQUS global system %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ox=[0.9938 -0.021 -0.109]; oy=[0.0201 0.9991 -0.0091]; oz=[0.073 0.0076 0.9973]; oxyz=[ox(1),oy(1), oz(1); ox(2),oy(2),oz(2);ox(3),oy(3),oz(3)]; % original point for local system o_local=[53.9952,92.3274,-99.0928]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % compute elastic forces of ligaments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % femur fixed, its insertion is marked with 1 % tibia fibula move, its insertion is marked with 2 % AM in ACL ligament, L1_AM is insertion in femur % L2_AM is insertion in tibia % L3_AM is new position of NN2_AM after movement L0_AM=25.1; % coordinates in ABAQUS global system L1_AM=[43.824501,107.9356,-99.8647003]; L2_AM=[51.4678993,90.4445038,-124.593102]; % compute the new position in local system L3=oxyz*R*inv(oxyz)*(L2_AM'-o_local')+oxyz*d'; L3_AM=L3'+L2_AM; xx1=L1_AM(1)-L3_AM(1); yy1=L1_AM(2)-L3_AM(2); zz1=L1_AM(3)-L3_AM(3); dx_AM=sqrt(xx1^2+yy1^2+zz1^2)-L0_AM; dx=dx_AM; if dx <0 F_AM=0; else F_AM=(1.1671+3.065*dx+2.6096*dx^2+0.99953*dx^3-0.06155*dx^4)*0.54; end if F_AM < 0 F_AM=0; end % PL in ACL ligament, L1_PL is insertion in femur % L2_PL is insertion in tibia % L3_PL is new position of L2_AM after movement L0_PL=27.3; % ABAQUS global coordinates L1_PL=[43.824501, 107.9356,-99.8647003]; L2_PL=[58.4379005, 86.5944977,-125.948196]; % compute the new positon in local system L3=oxyz*R*inv(oxyz)*(L2_PL'-o_local')+oxyz*d'; L3_PL=L3'+L2_PL; xx2=L1_PL(1)-L3_PL(1); yy2=L1_PL(2)-L3_PL(2); zz2=L1_PL(3)-L3_PL(3); dx_PL=sqrt(xx2^2+yy2^2+zz2^2)-L0_PL; dx=dx_PL; if dx < 0 F_PL=0; else F_PL=(1.1671+3.065*dx+2.6096*dx^2+0.99953*dx^3-0.06155*dx^4)*0.46; end if F_PL < 0 F_PL =0; end cosa=(xx1*xx2+yy1*yy2+zz1*zz2)/sqrt(zz1^2+yy1^2+zz1^2)/sqrt(xx2^2+yy2^2+zz2^2); F_ACL=sqrt(F_AM^2+F_PL^2+2*F_AM*F_PL*cosa); F_ACL=round(F_ACL*100)/100; % LCL ligament, L1_LCL is insertion in femur % L2_LCL is insertion in tibia % L3_LCL is new position of L2_LCL after movement L0_LCL=49.5; % ABAQUS global coordinates L1_LCL=[11.0170997, 100.830022,-98.3675029]; L2_LCL=[3.89059997, 109.567703,-156.951706]; % compute the new position in local system L3=oxyz*R*inv(oxyz)*(L2_LCL'-o_local')+oxyz*d'; L3_LCL=L3'+L2_LCL; dx_LCL=sqrt((L1_LCL(1)-L3_LCL(1))^2+(L1_LCL(2)-L3_LCL(2))^2+(L1_LCL(3)-L3_LCL(3))^2)-L0_LCL; dx=dx_LCL; if dx <0 F_LCL=0; else F_LCL=2.287-1.573*dx+4.8886*dx^2+0.18416*dx^3-0.040783*dx^4; end if F_LCL < 0 F_LCL=0; end F_LCL=round(F_LCL*100)/100;
% MCL ligament, L1_MCL is insertion in femur % L2_MCL is insertion in tibia % L3_MCL is new position of L2_MCL after movement L0_MCL=81; % ABAQUS global system L1_MCL=[94.1690985,80.2150008,-95.5930022]; L2_MCL=[73.5178986, 80.1570969, -165.155807]; % compute the new postion in local system L3=oxyz*R*inv(oxyz)*(L2_MCL'-o_local')+oxyz*d'; L3_MCL=L3'+L2_MCL; dx_MCL=sqrt((L1_MCL(1)-L3_MCL(1))^2+(L1_MCL(2)-L3_MCL(2))^2+(L1_MCL(3)-L3_MCL(3))^2)-L0_MCL; dx=dx_MCL; if dx < 0 F_MCL=0; else F_MCL=2.2548-7.3118*dx+9.9815*dx^2+1.4185*dx^3-0.21652*dx^4; end if F_MCL < 0 F_MCL=0; end F_MCL=round(F_MCL*100)/100; % PCL ligament, L1_PCL is insertion in femur % L2_PCL is insertion in tibia % L3_PCL is new position of L2_PCL after movement L0_PCL=32; % ABAQUS global system L1_PCL=[62.672699, 99.9365997, -105.149399]; L2_PCL=[42.3188019, 107.903603, -132.239502]; % compute the new position in local system L3=oxyz*R*inv(oxyz)*(L2_PCL'-o_local')+oxyz*d'; L3_PCL=L3'+L2_PCL; dx_PCL=sqrt((L1_PCL(1)-L3_PCL(1))^2+(L1_PCL(2)-L3_PCL(2))^2+(L1_PCL(3)-L3_PCL(3))^2)-L0_PCL; dx=dx_PCL; if dx < 0 F_PCL=0; else F_PCL=3.1947+0.53853*dx+0.44628*dx^2+3.6632*dx^3-0.3102*dx^4; end F_PCL=round(F_PCL*100)/100; if F_PCL < 0 F_PCL=0; end % OUTPUT set(handles.text18,'String',num2str(F_ACL)); set(handles.text19,'String',num2str(F_PCL)); set(handles.text20,'String',num2str(F_LCL)); set(handles.text21,'String',num2str(F_MCL)); guidata(hObject,handles);
|