Tutorial: Geometric design of a robot arm using Denavit-Hartenberg using SGLib

Tim Lueth, Professor at Technical University of Munich, Department of Mechanical Engineering, July 2018
This tutorial uses the symbollcs toolbox

1 Introduction into 6DoF serial Robot-Arms

At the end of the 1950s, the two kinematics experts Denavit and Hartenberg calculated inverse kinematics for serial robots, robot arms with 6 degrees of freedom (DoF), for the first time.
This possible calculation of inverse kinematics, i.e., the calculation of the required and desired joint positions from a specified position and tool orientation (6DoF) and an additional arm configuration, made it possible to program and use robots for industrial tasks and thus necessitated the production of robots from the end of the 1960s onwards.
A 6 Dof-robot consists of a frame and six subsequent links, which are connected at their joints via rotational degrees of freedom. This is followed by a robot hand or a normal tool at the "wrist" or "tool center point" (TCP).
loadweb('JACO_robot.mat'); % Load a robot arm example
loadweb: Access path to changed from "www.mimed.mw.tum.de" to "www.mw.tum.de/mimed/" in 2020 Aug. loadweb: Access path to changed from "www.mw.tum.de/mimed/" to "www.mec.ed.tum.de/mimed/" in 2021 Nov. Downloading "https://www.mec.ed.tum.de/fileadmin/w00cbp/mimed/Matlab_Toolboxes/JACO_robot.mat" into: /Volumes/LUETH-WIN/WIN AIM Matlab Libraries/SolidGeometry-Code!
The robot stored in a cell array. Each link of the robot is a Solid Geometry. JACO{1} ist the base, JACO{2} is the following link, and so on
whos JACO % The robot is a cell array of Soli
Name Size Bytes Class Attributes JACO 1x8 6369520 cell
SGfigure(-30,30); SGTplotalpha(JACO(1:7)); % Plot the links 1-7 of the arm ,the 7th link is the hand of JACO
If you remove your hand, you can see the six links and joints of the arm:
SGfigure(-30,30); SGTplotalpha(JACO(1:6)); % Plot the links of the arm
The fact that this clear illustration of the robot arm is already an assembled representation can be seen when the links of the robot arm are arranged in a box.
[~,SGall]=SGboxpacking(JACO);
binpacking3D: Packing 8 objects (h=398): VLFLtextattachVLUL: Text "06-Aug-2025 22-01-36" attached to union Nr: 2
SGfigure(-30,30); SGTplotalpha(SGall);

2 The usage of Coordinate Frames attached to the Robot arm links

This raises the question of how these individual links of the robot arm can be assembled into a movable robot kinematic or at least arranged spatially.
This is done using frames, local coordinate systems that are attached to the SG and move with it during translation or rotation.
In SGLib, solids with frames are abbreviated as SGT.
JACO{1}
ans = struct with fields:
VL: [20231Ă—3 double] FL: [40670Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[86Ă—1 double] [184Ă—1 double]} col: 'k' alpha: 0.9000
You can see that the member JACO{1} has two frames named "B" and "F" in addition to VL and FL, as well as two corresponding homogeneous transformation matrices that describe these frames relative to the surface coordinates VL.
The designation "B" stands for the frame that points to the base or is the base of the solid. The designation "F" is the follower frame to which the next link can be coupled.
The z-axis of all frames always points out of a body. This is the default notation in SGLib.
If you want these frames to be displayed, simply write "SGTplot" or "SGTplotalpha" instead of "SGplot" or "SGplotalpha."
SGfigure(-30,30); SGplotalpha(JACO{2},'',0.5);
SGfigure(-30,30); SGTplotalpha(JACO{2},'',0.5);
When a body is moved or rotated, the frames rotate with it so that their position relative to the body remains unchanged.
SGfigure(-30,30); SGTplotalpha(SGtransR(JACO{2},[pi/3,pi/3,pi/3]),'',0.5);

3 Spatial alignment of solids to their frames

If you use the frames of the solids for alignment, for example to move the body to the coordinate origin, there are two useful options:
1) The completely congruent alignment of one frame with another coordinate system "SGTmatchT". This is often not the desired result for frames.
SGTmatchT(JACO{2},'B'); % Green is the color of the solid when 'B' matches eye(4)
2) The alignment of a frame with a different coordinate system that is identical in Y but opposite in Z and X is called "SGTalignT." This is the standard alignment for connecting frames that point outward.
SGTalignT(JACO{2},'B'); % Green is the color of the solid when 'B' matches eye(4)
The coordinates of the frames can be obtained with "SGTget."
SGTget(JACO{2},'B')
ans = 4Ă—4
1.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.0000 -0.0000 0.0000 0 0.0000 -1.0000 94.5000 0 0 0 1.0000
You can also align a body so that its frame is aligned relative to another coordinate system:
SGTalignT(JACO{2},'B', TofR([pi/3,pi/2,pi/6])); % Green is the color of the solid when 'B' matches eye(4)

4 Relative spatial orientation of two links of a robot

SGfigure(-30,30); h={};
JACO{2}=SGTalignT(JACO{2},'B', eye(4));
SGTplotalpha(JACO{2},'',0.5); % Align "B" of JACO 2 to origin
JACO{3}=SGTalignT(JACO{3},'B', SGTget(JACO{2},'F')); % Align "B" of JACO-3 to Follower frame "F" of JACO-2
h{2}=SGTplotalpha(JACO{3},'',0.5);
You will quickly want to be able to rotate your body by a defined angle while aligning it.
delete(h{2});
JACO{3}=SGTalignT(JACO{3},'B', SGTget(JACO{2},'F'),pi); % Align "B" of JACO-3 to Follower frame "F" of JACO-2 and turn bu 180 deg i.e. pi rad
h{3}=SGTplotalpha(JACO{3},'',0.5);
or turn link 3 a little further
delete(h{3});
JACO{3}=SGTalignT(JACO{3},'B', SGTget(JACO{2},'F'),pi+0.5); % Align "B" of JACO-3 to Follower frame "F" of JACO-2 and turn bu 180 deg i.e. pi rad
h{3}=SGTplotalpha(JACO{3},'',0.5);
The fourth link can then be added in the same way, and so on.
JACO{4}=SGTalignT(JACO{4},'B', SGTget(JACO{3},'F'),pi+0.5); % Align "B" of JACO-3 to Follower frame "F" of JACO-2 and turn bu 180 deg i.e. pi rad
h{4}=SGTplotalpha(JACO{4},'',0.5);
JACO{5}=SGTalignT(JACO{5},'B', SGTget(JACO{4},'F'),pi+0.5); % Align "B" of JACO-3 to Follower frame "F" of JACO-2 and turn bu 180 deg i.e. pi rad
h{5}=SGTplotalpha(JACO{5},'',0.5);
JACO{6}=SGTalignT(JACO{6},'B', SGTget(JACO{5},'F'),pi+0.5); % Align "B" of JACO-3 to Follower frame "F" of JACO-2 and turn bu 180 deg i.e. pi rad
h{6}=SGTplotalpha(JACO{6},'',0.5);
The concept of frames should now be understood. The frames can be assigned using the "SGTset" function. In the imported robot geometry, the frames were already part of the solids. There are also some functions such as "SGTui" for interactive creation of frames.

5 Creation of robot links according to Denativ and Hartenberg.

From a kinematic point of view, it is not the geometry of the robot arm that is important, but only the relative transformation matrix between the respective frames "B" and "F," or the alignment of the "B" frame of a link with the "F" frame of the previous link. The movement of the robot is just a shift of frames relative to the frame of a previous frame in the serial chain of links. The graphical representation of the robot, which is so interesting to us humans, or the motor movement of the real body, which is so important for the movement of a real robot, is mathematically just a "realization problem."
However, it is helpful for us engineers if we can not only "stick" frames onto existing body geometries, but conversely, automatically generate the corresponding geometry of a robot based on spatial specifications of frames. At least a first draft.
The "SGTofDenavitHartenberg" function is used for this purpose.
In Denavit-Hartenberg notation, there is a height D (1st parameter, here 100) from the plane and a distance a (2nd parameter, here zero) from the z-axis, and a rotation around the x-axis (3rd parameter, here 90 degrees) to define the position of the follower frame "F," i.e., the connection point for the next link. The rotation clearly shows that the connection for the next member is actually perpendicular above the base frame.
SGTofDenavitHartenberg(100,0,pi/2); figurerotate('',90)
To understand how this function works, I recommend simply trying out the parameters:
SGTofDenavitHartenberg(100,0,[0 0]); %
SGTofDenavitHartenberg(100,0,[pi/2 0]);
SGTofDenavitHartenberg(100,0,[0 pi/2]);
SGTofDenavitHartenberg(100,40,[0 0]);
SGTofDenavitHartenberg(100,40,[pi/2 0]);
SGTofDenavitHartenberg(100,40,[0 pi/2]);
And for those who enjoy complicated cross-sections, there is also:
CPLsample(38);
because the 4th parameter processes a centered cross section as a contour.
SGTofDenavitHartenberg(100,40,[0 pi/2],CPLsample(38)); view(42,11); figurerotate('',90);
SGTofDenavitHartenberg(100,40,[0 pi/2],CPLsample(30)); view(42,11); figurerotate('',90)

6 The homogeneous transformation matrix with DH parameter for symbolic calculation

The upper section describes the Denavit-Hartenberg notation for decomposing a kinematic system into individual links, which then results in the structure of the homogeneous transformation matrix (HT matrix) that describes each link.
If there is a sequential chaining of these links, the F-frame of the last link relative to the B-frame of the first link in this kinematic chain can be calculated by multiplying the HT matrices in the order of the links.
Each of these HT matrices contains a variable that describes the degree of freedom of the link. In this example, this is an angle that describes the position of a rotary joint or, in the case of a robot, the position that a servo motor sets to move the rotary joint.
The SGTofDenavitHartenberg function not only provides the geometry of the arm but also, with the help of the Symbolics Toolbox, the symbolic equations for describing the link.
[SG1,T1,TT1]=SGTofDenavitHartenberg(100,40,[0 pi/2]), SGfigure(SG1); view(42,11);
SG1 = struct with fields:
VL: [1404Ă—3 double] FL: [2808Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[] []}
T1 = 
TT1 = 
[SG2,T2,TT2]=SGTofDenavitHartenberg(0,100,[pi 0]), SGfigure(SG2); view(42,11); VLFLplotlight(1,0.5);
SG2 = struct with fields:
VL: [2496Ă—3 double] FL: [4992Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[] []}
T2 = 
TT2 = 

7 The homogeneous transformation matrix with DH parameter for serial-link robot-arm

It is easy to imagine that there should be a function for a serial chain of arm members that generates the entire chain and stores it in a cell list or cell array.
This function is called SGTofDHset. In this function, the DH parameters are passed in a [n x 4] array [d1 a1 wx1 wy2], and it is also possible to specify a cross-section profile.
SGTofDHset([50 0 0 0; 100,0,pi/2 0;0 100 pi*0.99 0;0 100 0 pi/2],[PLsquare(20,30);nan nan; PLcircle(7)]);
This illustration also shows why robot arms always have a circular profile at the joint in practice. This avoids unsightly open pivot surfaces, which occur at angles when the cross-sectional areas do not happen to fit together.
SGTofDHset([50 0 0 0; 100,0,pi/2 0;0 100 pi*0.99 0;0 100 0 pi/2],[PLcircle(10);nan nan; PLcircle(7)]);
Let's take a look at the output parameters
[SG,Ti,SGN,Tii,E]=SGTofDHset([50 0 0 0; 100,0,pi/2 0;0 100 pi*0.99 0;0 100 0 pi/2],[PLcircle(10);nan nan; PLcircle(7)]);
The first output parameter is the geometry of the links. It is a cell list containing all links for which the B-frame is located at the coordinate origin. The robot is therefore not assembled.
SGfigure(-30,30); SGplotcell(SG); SG{:}
ans = struct with fields:
VL: [252Ă—3 double] FL: [504Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[] []}
ans = struct with fields:
VL: [2100Ă—3 double] FL: [4200Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[] []}
ans = struct with fields:
VL: [2688Ă—3 double] FL: [5376Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[] []}
ans = struct with fields:
VL: [2100Ă—3 double] FL: [4200Ă—3 double] Tname: {'B' 'F'} T: {[4Ă—4 double] [4Ă—4 double]} TFiL: {[] []}
The second output parameter is a cell array containing the respective symbolic DH matrices of the individual elements, in which, however, the geometric constants d and a of the DH matrix are incorporated.
Ti{:}
ans = 
ans = 
ans = 
ans = 
The third output parameter is SG with the "assembled" kinematic chain and the transformation of the links to the correct position.
SGfigure(SGN); SGplotcell(SGN);
The fourth output parameter is a cell array containing the respective symbolic DH matrices of the individual elements, in which, however, the geometric constants d and a of the DH matrix are still present in the equations.
Tii{:}
ans = 
ans = 
ans = 
ans = 
The fifth output parameter contains the symbolic equations for the forward kinematics up to the last F frame. This equation can be used to calculate the backward kinematics symbolically or to reduce the complexity.
E
E = 
R=E(1:3,1:3)
R = 
t=E(1:3,4)
t = 
In this equation, you can then reinsert the values for d1=50, d2=100, a3=100, a4=100 as required.
t=subs(t,'d1',50)
t = 
t=subs(t,'d1',100)
t = 
t=subs(t,'a3',100)
t = 
t=subs(t,'a4',100)
t = 
The inverse kinematics would be calculated with:
% syms x y z
% solve(t==[x y z]',w1,w2,w3,w4) % Due to time constraints, this should not be done.

8 Direct calculation of numerical equations for forward kinematics from symbolic formulas

We can also obtain numerical equations for calculating the forward kinematics from the symbolic equations.
[e,f,g]=symbforwkine(SG,Ti);
e{:}
ans = 
ans = 
ans = 
ans = 
f
f =
f(:,:,1) = 0 0 50 0 0 150 100 0 150 200 0 150 f(:,:,2) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,3) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,4) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,5) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,6) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,7) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,8) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,9) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,10) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,11) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,12) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,13) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,14) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 200.0000 -0.0000 150.0000 f(:,:,15) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,16) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,17) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,18) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,19) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,20) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 200.0000 -0.0000 150.0000 f(:,:,21) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,22) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,23) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,24) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,25) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,26) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 200.0000 -0.0000 150.0000 f(:,:,27) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,28) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,29) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,30) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,31) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,32) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 200.0000 -0.0000 150.0000 f(:,:,33) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,34) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,35) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,36) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,37) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,38) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 200.0000 -0.0000 150.0000 f(:,:,39) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,40) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,41) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,42) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,43) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 124.6980 -156.3663 150.0000 f(:,:,44) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 200.0000 -0.0000 150.0000 f(:,:,45) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 124.6980 156.3663 150.0000 f(:,:,46) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -44.5042 194.9856 150.0000 f(:,:,47) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -180.1938 86.7767 150.0000 f(:,:,48) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -180.1938 -86.7767 150.0000 f(:,:,49) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -44.5042 -194.9856 150.0000 f(:,:,50) = 0 0 50.0000 0 0 150.0000 62.3490 0 228.1831 124.6980 0 306.3663 f(:,:,51) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,52) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,53) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,54) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,55) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,56) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,57) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,58) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,59) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,60) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,61) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,62) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,63) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 124.6980 -0.0000 306.3663 f(:,:,64) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,65) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,66) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,67) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,68) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,69) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 124.6980 -0.0000 306.3663 f(:,:,70) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,71) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,72) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,73) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,74) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,75) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 124.6980 -0.0000 306.3663 f(:,:,76) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,77) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,78) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,79) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,80) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,81) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 124.6980 -0.0000 306.3663 f(:,:,82) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,83) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,84) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,85) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,86) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,87) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 124.6980 -0.0000 306.3663 f(:,:,88) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,89) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,90) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,91) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,92) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 77.7479 -97.4928 306.3663 f(:,:,93) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 124.6980 -0.0000 306.3663 f(:,:,94) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 77.7479 97.4928 306.3663 f(:,:,95) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -27.7479 121.5715 306.3663 f(:,:,96) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -112.3490 54.1044 306.3663 f(:,:,97) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -112.3490 -54.1044 306.3663 f(:,:,98) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -27.7479 -121.5715 306.3663 f(:,:,99) = 0 0 50.0000 0 0 150.0000 -22.2521 0 247.4928 -44.5042 0 344.9856 f(:,:,100) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,101) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,102) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,103) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,104) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,105) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,106) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,107) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,108) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,109) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,110) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,111) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,112) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 247.4928 -44.5042 0.0000 344.9856 f(:,:,113) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,114) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,115) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,116) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,117) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,118) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 247.4928 -44.5042 0.0000 344.9856 f(:,:,119) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,120) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,121) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,122) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,123) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,124) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 247.4928 -44.5042 0.0000 344.9856 f(:,:,125) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,126) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,127) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,128) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,129) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,130) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 247.4928 -44.5042 0.0000 344.9856 f(:,:,131) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,132) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,133) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,134) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,135) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,136) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 247.4928 -44.5042 0.0000 344.9856 f(:,:,137) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,138) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,139) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,140) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,141) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 247.4928 -27.7479 34.7948 344.9856 f(:,:,142) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 247.4928 -44.5042 0.0000 344.9856 f(:,:,143) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 247.4928 -27.7479 -34.7948 344.9856 f(:,:,144) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 247.4928 9.9031 -43.3884 344.9856 f(:,:,145) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 247.4928 40.0969 -19.3096 344.9856 f(:,:,146) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 247.4928 40.0969 19.3096 344.9856 f(:,:,147) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 247.4928 9.9031 43.3884 344.9856 f(:,:,148) = 0 0 50.0000 0 0 150.0000 -90.0969 0 193.3884 -180.1938 0 236.7767 f(:,:,149) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,150) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,151) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,152) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,153) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,154) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,155) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,156) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,157) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,158) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,159) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,160) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,161) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 193.3884 -180.1938 0.0000 236.7767 f(:,:,162) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,163) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,164) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,165) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,166) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,167) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 193.3884 -180.1938 0.0000 236.7767 f(:,:,168) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,169) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,170) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,171) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,172) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,173) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 193.3884 -180.1938 0.0000 236.7767 f(:,:,174) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,175) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,176) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,177) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,178) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,179) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 193.3884 -180.1938 0.0000 236.7767 f(:,:,180) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,181) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,182) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,183) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,184) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,185) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 193.3884 -180.1938 0.0000 236.7767 f(:,:,186) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,187) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,188) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,189) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,190) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 193.3884 -112.3490 140.8812 236.7767 f(:,:,191) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 193.3884 -180.1938 0.0000 236.7767 f(:,:,192) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 193.3884 -112.3490 -140.8812 236.7767 f(:,:,193) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 193.3884 40.0969 -175.6759 236.7767 f(:,:,194) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 193.3884 162.3490 -78.1831 236.7767 f(:,:,195) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 193.3884 162.3490 78.1831 236.7767 f(:,:,196) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 193.3884 40.0969 175.6759 236.7767 f(:,:,197) = 0 0 50.0000 0 0 150.0000 -90.0969 0 106.6116 -180.1938 0 63.2233 f(:,:,198) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,199) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,200) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,201) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,202) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,203) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,204) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,205) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,206) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,207) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,208) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,209) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,210) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 106.6116 -180.1938 0.0000 63.2233 f(:,:,211) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,212) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,213) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,214) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,215) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,216) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 106.6116 -180.1938 0.0000 63.2233 f(:,:,217) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,218) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,219) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,220) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,221) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,222) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 106.6116 -180.1938 0.0000 63.2233 f(:,:,223) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,224) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,225) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,226) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,227) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,228) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 106.6116 -180.1938 0.0000 63.2233 f(:,:,229) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,230) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,231) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,232) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,233) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,234) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 106.6116 -180.1938 0.0000 63.2233 f(:,:,235) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,236) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,237) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,238) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,239) = 0 0 50.0000 0 0 150.0000 -56.1745 70.4406 106.6116 -112.3490 140.8812 63.2233 f(:,:,240) = 0 0 50.0000 0 0 150.0000 -90.0969 0.0000 106.6116 -180.1938 0.0000 63.2233 f(:,:,241) = 0 0 50.0000 0 0 150.0000 -56.1745 -70.4406 106.6116 -112.3490 -140.8812 63.2233 f(:,:,242) = 0 0 50.0000 0 0 150.0000 20.0484 -87.8380 106.6116 40.0969 -175.6759 63.2233 f(:,:,243) = 0 0 50.0000 0 0 150.0000 81.1745 -39.0916 106.6116 162.3490 -78.1831 63.2233 f(:,:,244) = 0 0 50.0000 0 0 150.0000 81.1745 39.0916 106.6116 162.3490 78.1831 63.2233 f(:,:,245) = 0 0 50.0000 0 0 150.0000 20.0484 87.8380 106.6116 40.0969 175.6759 63.2233 f(:,:,246) = 0 0 50.0000 0 0 150.0000 -22.2521 0 52.5072 -44.5042 0 -44.9856 f(:,:,247) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,248) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,249) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,250) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,251) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,252) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,253) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,254) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,255) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,256) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,257) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,258) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,259) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 52.5072 -44.5042 0.0000 -44.9856 f(:,:,260) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,261) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,262) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,263) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,264) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,265) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 52.5072 -44.5042 0.0000 -44.9856 f(:,:,266) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,267) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,268) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,269) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,270) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,271) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 52.5072 -44.5042 0.0000 -44.9856 f(:,:,272) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,273) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,274) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,275) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,276) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,277) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 52.5072 -44.5042 0.0000 -44.9856 f(:,:,278) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,279) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,280) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,281) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,282) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,283) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 52.5072 -44.5042 0.0000 -44.9856 f(:,:,284) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,285) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,286) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,287) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,288) = 0 0 50.0000 0 0 150.0000 -13.8740 17.3974 52.5072 -27.7479 34.7948 -44.9856 f(:,:,289) = 0 0 50.0000 0 0 150.0000 -22.2521 0.0000 52.5072 -44.5042 0.0000 -44.9856 f(:,:,290) = 0 0 50.0000 0 0 150.0000 -13.8740 -17.3974 52.5072 -27.7479 -34.7948 -44.9856 f(:,:,291) = 0 0 50.0000 0 0 150.0000 4.9516 -21.6942 52.5072 9.9031 -43.3884 -44.9856 f(:,:,292) = 0 0 50.0000 0 0 150.0000 20.0484 -9.6548 52.5072 40.0969 -19.3096 -44.9856 f(:,:,293) = 0 0 50.0000 0 0 150.0000 20.0484 9.6548 52.5072 40.0969 19.3096 -44.9856 f(:,:,294) = 0 0 50.0000 0 0 150.0000 4.9516 21.6942 52.5072 9.9031 43.3884 -44.9856 f(:,:,295) = 0 0 50.0000 0 0 150.0000 62.3490 0 71.8169 124.6980 0 -6.3663 f(:,:,296) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,297) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,298) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,299) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,300) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,301) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,302) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,303) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,304) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,305) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,306) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,307) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,308) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 71.8169 124.6980 -0.0000 -6.3663 f(:,:,309) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,310) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,311) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,312) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,313) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,314) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 71.8169 124.6980 -0.0000 -6.3663 f(:,:,315) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,316) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,317) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,318) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,319) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,320) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 71.8169 124.6980 -0.0000 -6.3663 f(:,:,321) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,322) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,323) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,324) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,325) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,326) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 71.8169 124.6980 -0.0000 -6.3663 f(:,:,327) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,328) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,329) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,330) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,331) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,332) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 71.8169 124.6980 -0.0000 -6.3663 f(:,:,333) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,334) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,335) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,336) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,337) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 71.8169 77.7479 -97.4928 -6.3663 f(:,:,338) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 71.8169 124.6980 -0.0000 -6.3663 f(:,:,339) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 71.8169 77.7479 97.4928 -6.3663 f(:,:,340) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 71.8169 -27.7479 121.5715 -6.3663 f(:,:,341) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 71.8169 -112.3490 54.1044 -6.3663 f(:,:,342) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 71.8169 -112.3490 -54.1044 -6.3663 f(:,:,343) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 71.8169 -27.7479 -121.5715 -6.3663 f(:,:,344) = 0 0 50.0000 0 0 150.0000 100.0000 0 150.0000 162.3490 -2.4558 71.8554 f(:,:,345) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,346) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,347) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,348) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,349) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,350) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,351) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,352) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,353) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,354) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,355) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,356) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,357) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 162.3490 -2.4558 71.8554 f(:,:,358) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,359) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,360) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,361) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,362) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,363) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 162.3490 -2.4558 71.8554 f(:,:,364) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,365) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,366) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,367) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,368) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,369) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 162.3490 -2.4558 71.8554 f(:,:,370) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,371) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,372) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,373) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,374) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,375) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 162.3490 -2.4558 71.8554 f(:,:,376) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,377) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,378) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,379) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,380) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,381) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 162.3490 -2.4558 71.8554 f(:,:,382) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,383) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,384) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,385) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,386) = 0 0 50.0000 0 0 150.0000 62.3490 -78.1831 150.0000 99.3029 -128.4607 71.8554 f(:,:,387) = 0 0 50.0000 0 0 150.0000 100.0000 -0.0000 150.0000 162.3490 -2.4558 71.8554 f(:,:,388) = 0 0 50.0000 0 0 150.0000 62.3490 78.1831 150.0000 103.1429 125.3984 71.8554 f(:,:,389) = 0 0 50.0000 0 0 150.0000 -22.2521 97.4928 150.0000 -33.7318 158.8250 71.8554 f(:,:,390) = 0 0 50.0000 0 0 150.0000 -90.0969 43.3884 150.0000 -145.2058 72.6532 71.8554 f(:,:,391) = 0 0 50.0000 0 0 150.0000 -90.0969 -43.3884 150.0000 -147.3369 -68.2280 71.8554 f(:,:,392) = 0 0 50.0000 0 0 150.0000 -22.2521 -97.4928 150.0000 -38.5203 -157.7321 71.8554 f(:,:,393) = 0 0 50.0000 0 0 150.0000 62.3490 0 228.1831 162.3188 -2.4558 228.2072 f(:,:,394) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,395) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,396) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,397) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -147.3097 -68.2149 228.2072 f(:,:,398) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -38.5136 -157.7027 228.2072 f(:,:,399) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,400) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,401) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,402) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,403) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -147.3097 -68.2149 228.2072 f(:,:,404) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -38.5136 -157.7027 228.2072 f(:,:,405) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,406) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 162.3188 -2.4558 228.2072 f(:,:,407) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,408) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,409) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -147.3097 -68.2149 228.2072 f(:,:,410) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -38.5136 -157.7027 228.2072 f(:,:,411) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,412) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 162.3188 -2.4558 228.2072 f(:,:,413) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,414) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,415) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -147.3097 -68.2149 228.2072 f(:,:,416) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -38.5136 -157.7027 228.2072 f(:,:,417) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,418) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 162.3188 -2.4558 228.2072 f(:,:,419) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,420) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,421) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -147.3097 -68.2149 228.2072 f(:,:,422) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -38.5136 -157.7027 228.2072 f(:,:,423) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,424) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 162.3188 -2.4558 228.2072 f(:,:,425) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,426) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,427) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,428) = 0 0 50.0000 0 0 150.0000 -13.8740 -60.7858 228.1831 -38.5136 -157.7027 228.2072 f(:,:,429) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,430) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 162.3188 -2.4558 228.2072 f(:,:,431) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,432) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,433) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,434) = 0 0 50.0000 0 0 150.0000 -56.1745 -27.0522 228.1831 -147.3097 -68.2149 228.2072 f(:,:,435) = 0 0 50.0000 0 0 150.0000 38.8740 -48.7464 228.1831 99.2841 -128.4371 228.2072 f(:,:,436) = 0 0 50.0000 0 0 150.0000 62.3490 -0.0000 228.1831 162.3188 -2.4558 228.2072 f(:,:,437) = 0 0 50.0000 0 0 150.0000 38.8740 48.7464 228.1831 103.1241 125.3748 228.2072 f(:,:,438) = 0 0 50.0000 0 0 150.0000 -13.8740 60.7858 228.1831 -33.7251 158.7956 228.2072 f(:,:,439) = 0 0 50.0000 0 0 150.0000 -56.1745 27.0522 228.1831 -145.1787 72.6401 228.2072 f(:,:,440) =
The third output parameter is a cell array with numerical functions for directly calculating the HT matrix of the respective F-frame directly from the given angular positions of the (here 4) rotary joints.
g{:}
ans = function_handle with value: @(w1)reshape([cos(w1),sin(w1),0.0,0.0,-sin(w1),cos(w1),0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,5.0e+1,1.0],[4,4])
ans = function_handle with value: @(w1,w2)reshape([cos(w1).*cos(w2)-sin(w1).*sin(w2),cos(w1).*sin(w2)+cos(w2).*sin(w1),0.0,0.0,0.0,0.0,1.0,0.0,cos(w1).*sin(w2)+cos(w2).*sin(w1),-cos(w1).*cos(w2)+sin(w1).*sin(w2),0.0,0.0,0.0,0.0,1.5e+2,1.0],[4,4])
ans = function_handle with value: @(w1,w2,w3)reshape([cos(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),cos(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),sin(w3),0.0,sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),-cos(pi./1.0e+2).*cos(w3),0.0,-cos(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+sin(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),cos(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))+sin(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),-sin(pi./1.0e+2).*cos(w3),0.0,cos(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)).*1.0e+2,cos(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)).*1.0e+2,sin(w3).*1.0e+2+1.5e+2,1.0],[4,4])
ans = function_handle with value: @(w1,w2,w3,w4)reshape([cos(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))-sin(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-cos(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-sin(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),sin(pi./1.0e+2).*cos(w3),0.0,cos(w4).*(sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)))-cos(w3).*sin(w4).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-cos(w4).*(sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)))-cos(w3).*sin(w4).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),-sin(w3).*sin(w4)-cos(pi./1.0e+2).*cos(w3).*cos(w4),0.0,sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)))+cos(w3).*cos(w4).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)))+cos(w3).*cos(w4).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),cos(w4).*sin(w3)-cos(pi./1.0e+2).*cos(w3).*sin(w4),0.0,sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))).*1.0e+2+cos(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)).*1.0e+2+cos(w3).*cos(w4).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)).*1.0e+2,sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))).*-1.0e+2+cos(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)).*1.0e+2+cos(w3).*cos(w4).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)).*1.0e+2,sin(w3).*1.0e+2+cos(w4).*sin(w3).*1.0e+2-cos(pi./1.0e+2).*cos(w3).*sin(w4).*1.0e+2+1.5e+2,1.0],[4,4])
The function for determining the F-frame of the fourth limb at angles (0,pi,0,pi) is
g{4}
ans = function_handle with value: @(w1,w2,w3,w4)reshape([cos(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))-sin(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-cos(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-sin(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),sin(pi./1.0e+2).*cos(w3),0.0,cos(w4).*(sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)))-cos(w3).*sin(w4).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-cos(w4).*(sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)))-cos(w3).*sin(w4).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),-sin(w3).*sin(w4)-cos(pi./1.0e+2).*cos(w3).*cos(w4),0.0,sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)))+cos(w3).*cos(w4).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)),-sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)))+cos(w3).*cos(w4).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)),cos(w4).*sin(w3)-cos(pi./1.0e+2).*cos(w3).*sin(w4),0.0,sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))+cos(pi./1.0e+2).*sin(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))).*1.0e+2+cos(w3).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)).*1.0e+2+cos(w3).*cos(w4).*(cos(w1).*cos(w2)-sin(w1).*sin(w2)).*1.0e+2,sin(w4).*(sin(pi./1.0e+2).*(cos(w1).*cos(w2)-sin(w1).*sin(w2))-cos(pi./1.0e+2).*sin(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1))).*-1.0e+2+cos(w3).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)).*1.0e+2+cos(w3).*cos(w4).*(cos(w1).*sin(w2)+cos(w2).*sin(w1)).*1.0e+2,sin(w3).*1.0e+2+cos(w4).*sin(w3).*1.0e+2-cos(pi./1.0e+2).*cos(w3).*sin(w4).*1.0e+2+1.5e+2,1.0],[4,4])
HT4=g{4}(0,pi,pi,0)
HT4 = 4Ă—4
0.0000 -0.0000 1.0000 200.0000 0.9995 0.0314 -0.0000 -0.0000 -0.0314 0.9995 0.0000 150.0000 0 0 0 1.0000
Unfortunately, it is also quite clear that the numerical accuracy of these calculations with HT matrices leads to angular errors in the degree range even with just four concatenations. The correct Euler angles should be 90 0 90.
This is why numerical calculations usually switch to quaternions and use these instead of homogeneous transformation matrices in the calculations.
rotm2eul(HT4(1:3,1:3))/pi*180
ans = 1Ă—3
90.0000 1.8000 90.0000

9 Graphical representation of robot poses, based on defined joint angle values

The graphical representation of the pose assumed by a robot can be displayed using SGTchain. SGTchain moves all links of a kinematic chain according to the joint angles and stores the position of the links in the SG cell array at the correct position.
To align the zero position of the joint angles with the zero position of a real robot, there is the function "SGTcalibchain."
SGTchain(JACO(1:6),[0 0 +60 +90 +90] /180*pi); SGN=ans; view(-80,20); %
SGTchain(SG(1:4),[0 0 +60 +90 +90] /180*pi); view(-30,30); %
SGN=SGTchain(SG(1:4),[0 0 +60 +90 +90] /180*pi); SGplotcell(SGN);

10 Animating the movement of a serial kinematics (robot arms)

If you want to represent a movement of a robot's rotary joint, the "handles" of the plotted solid, which are the output parameters of a plot function, must be saved.
The handles are an array, where the first handle is for the first link/base, the second for the second link, and so on. For a movement, part of the robot's representation must then be deleted, the geometry rotated, and redrawn.
This is done by the "Videoquickanimatego" function, which is passed the handles to be moved, a coordinate system for rotation, the step size in degrees of rotation, and the movement principle ("rotation around the z-axis").
SGfigure(-30,30); axis4animation([0 1 0 1 0 1]); h=SGplot(JACO(2:6)); shg; view(-30,30); Videoquickanimatego('',{h([1:end]),SGTget(SGN{1},'B'),5,'rotz'})
ans = 10.0009
Hier wird der Roboter an der Basis gedreht. Um es besser sichtbar zu machen, ergänzen wir zur Geometrie einen kleinen Sockel an der sonst zylindrischen Basis.
SGN{1}=SGconcat(SGN{1},SGbox([40 20 10]));
SGfigure(-30,30); axis4animation([0 1 0 1 0 1]); h=SGplot(SGN); shg; view(-30,30); Videoquickanimatego('',{h([1:end]),SGTget(SGN{1},'B'),5,'rotz'})
ans = 10.0010
Hier wird der Roboter am zweiten Gelenk gedreht.
clf; h=SGplot(SGN); shg; view(-30,30); Videoquickanimatego('',{h([2:end]),SGTget(SGN{2},'B'),5,'rotz'})
ans = 10.0011
Hier wird der Roboter am dritten Gelenk gedreht.
clf; h=SGplot(SGN); shg; view(-30,30); Videoquickanimatego('',{h([3:end]),SGTget(SGN{3},'B'),5,'rotz'})
ans = 10.0012
Hier wird der Roboter am vierten Gelenk gedreht.
clf; h=SGplot(SGN); shg; view(-30,30); Videoquickanimatego('',{h([4:end]),SGTget(SGN{4},'B'),5,'rotz'})
ans = 10.0013

Show the execution time of this script

stamp
stamp: Mac OSX 15.5 | R2024b Update 6 | SG-Lib 5.4 | Java 11.0.24+8-LTS | M3-PRO 12-Core CPU, 18-Core GPU 36GByte RAM | 06-Aug-2025 22:02:55