(*^ ::[ Information = "This is a Mathematica Notebook file. It contains ASCII text, and can be transferred by email, ftp, or other text-file transfer utility. It should be read or edited using a copy of Mathematica or MathReader. If you received this as email, use your mail application or copy/paste to save everything from the line containing (*^ down to the line containing ^*) into a plain text file. On some systems you may have to give the file a name ending with ".ma" to allow Mathematica to recognize it as a Notebook. The line below identifies what version of Mathematica created this file, but it can be opened using any other version as well."; FrontEndVersion = "X Window System Mathematica Notebook Front End Version 2.2"; X11StandardFontEncoding; fontset = title, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, M7, N0, bold, L-5, a0, e130, 24, fontName, "helvetica"; fontset = subtitle, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeTitle, M7, N0, bold, a10, e2, 12, fontName, "helvetica"; fontset = subsubtitle, inactive, nohscroll, preserveAspect, groupLikeTitle, M7, N0, a2, e2, 12, fontName, "helvetica"; fontset = section, inactive, pageBreak, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, grayBox, M26, N0, bold, L-2, a24, 18, fontName, "helvetica"; fontset = subsection, inactive, noPageBreakBelow, nohscroll, preserveAspect, groupLikeSection, blackBox, M21, N0, bold, L-3, a18, 16, fontName, "times"; fontset = subsubsection, inactive, noPageBreakBelow, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeSection, whiteBox, M21, N0, bold, a12, 14, fontName, "times"; fontset = text, inactive, nohscroll, preserveAspect, M35, N0, L2, a2, e2, 14, fontName, "times"; fontset = smalltext, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M35, N0, L2, a2, e0, 12, fontName, "times"; fontset = input, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeInput, M16, N0, bold, L2, a2, e2, 12, fontName, "courier"; fontset = output, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M16, N0, L-5, a2, e2, 12, fontName, "courier"; fontset = message, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M16, N0, R65535, 12, fontName, "courier"; fontset = print, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M16, N0, 12, fontName, "courier"; fontset = info, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeOutput, M16, N0, 12, fontName, "courier"; fontset = postscript, PostScript, formatAsPostScript, output, inactive, noPageBreakInGroup, nowordwrap, preserveAspect, groupLikeGraphics, M7, l34, w282, h287, 12, fontName, "courier"; fontset = name, inactive, noPageBreakInGroup, nohscroll, preserveAspect, M7, italic, B65535, 10, fontName, "times"; fontset = header, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, italic, 12, fontName, "times"; fontset = leftheader, 12, fontName, "times"; fontset = footer, inactive, nohscroll, noKeepOnOnePage, preserveAspect, center, M7, italic, 12, fontName, "times"; fontset = leftfooter, 12, fontName, "times"; fontset = help, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = clipboard, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "times"; fontset = completions, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, 12, fontName, "courier"; fontset = special1, inactive, nohscroll, noKeepOnOnePage, preserveAspect, blackBox, M57, N0, L2, a2, e2, 12, fontName, "times"; fontset = special2, inactive, nohscroll, noKeepOnOnePage, preserveAspect, M7, N0, L2, a2, e2, 12, fontName, "times"; fontset = special3, inactive, noPageBreakBelow, nohscroll, preserveAspect, cellOutline, M15, N0, a2, e2, 14, fontName, "times"; fontset = special4, inactive, noPageBreak, nohscroll, preserveAspect, M7, a0, e2, 12, fontName, "helvetica"; fontset = special5, inactive, noPageBreakBelow, noPageBreakInGroup, nohscroll, preserveAspect, whiteBox, M21, N0, bold, a2, e2, 12, fontName, "helvetica";paletteColors = 128; currentKernel; ] :[font = section; inactive; pageBreak; preserveAspect; startGroup] Generalized Coordinate Package Appendix ;[s] 1:0,0;39,-1; 1:1,0,0 ,helvetica,1,18,0,0,0; :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] A. Modified Mechanical Systems Pack Symbols :[font = special2; inactive; preserveAspect; endGroup] Additional definitions are made by the Generalized Coordinate modeling package for several standard Mech symbols. The new definitions do not change the usage of these symbols in any way, the standard usage is simply extended so as to work correctly with generalized coordinates. The letter "G" is appended to the $MechVersion string to indicate that the Generalized Coordinate Package has been loaded. ;[s] 7:0,0;100,1;104,2;292,3;295,4;315,5;327,6;403,-1; 7:1,0,0 ,times,0,12,0,0,0;1,0,0 ,times,2,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsection; inactive; Cclosed; preserveAspect; startGroup] B. Listing of Generaized Coordinate Package Objects ;[s] 1:0,0;51,-1; 1:1,0,0 ,times,1,16,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenConstraint 2D/3D ;[s] 3:0,0;13,1;19,2;24,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenConstraint[cnum, point1, point2, rot, {sym, guess}] returns a constraint object which introduces a slave body represented by generalized coordinates into the model. A point on the slave body, point1, is constrained to be coincident with a point on the master, point2. The angular orientation of the slave with respect to the master is specified by rot. In Mech2D, rot is a counterclockwise angle. In Mech3D, rot is specified in the {ang, axis} format, and it can be a single rotation or a sequence of rotations of the form used by RotationLock3. {sym, guess}, or {sym1, guess1}, {sym2, guess2}, ..., are generalized coordinate symbols and their associated initial guesses which are added to the model. ;[s] 39:0,0;14,1;41,2;42,3;52,4;54,5;195,6;201,7;263,8;269,9;351,10;354,11;359,12;365,13;367,14;370,15;403,16;409,17;411,18;414,19;435,20;436,21;445,22;446,23;534,24;547,25;549,26;550,27;560,28;561,29;566,30;567,31;579,32;580,33;582,34;583,35;595,36;596,37;601,38;704,-1; 39:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] GenConstraint is used to create user-defined generalized coordinate relationships. Mech generalized coordinate constraints do not actually constrain any degrees of freedom or add any algebraic constraints to the model, they simply set up the necessary coordinate transformations so that a new slave body can be recognized appropriately by Mech's modeling engine. ## See also: Constraint. ;[s] 8:0,0;13,1;83,2;87,3;339,4;343,5;378,6;388,7;389,-1; 8:1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,times,2,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,times,2,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenCylindrical4 3D ;[s] 3:0,0;15,1;21,2;23,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenCylindrical4[cnum, axis1, axis2, {alpha, guess}, {beta, guess}] returns a constraint object that introduces a slave body into the model represented by two generalized coordinates alpha and beta. The axis1 body is a slave to the axis2 body with one degree of rotational freedom and one degree of translational freedom. The two axes are constrained to be colinear and the distance from the origin of axis2 to that of axis1, in the direction of axis2, is represented by alpha. The angle from the projection of the reference direction of axis2 to that of axis1, in the right-hand sense, is represented by beta. ;[s] 32:0,0;16,1;36,2;37,3;49,4;50,5;52,6;53,7;64,8;66,9;182,10;187,11;192,12;196,13;202,14;207,15;231,16;236,17;401,18;406,19;418,20;423,21;445,22;450,23;470,24;475,25;537,26;542,27;554,28;559,29;604,30;608,31;609,-1; 32:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] Note that GenCylindrical4 actually adds two DOF to the model, as opposed to constraining four. ## See also: Cylindrical4. ;[s] 5:0,0;10,1;25,2;110,3;122,4;123,-1; 5:1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenOrthoRevolute4 3D ;[s] 3:0,0;17,1;22,2;24,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenOrthoRevolute4[cnum, axis1, axis2, {alpha, guess}, {beta, guess}] returns a constraint object that introduces a slave body into the model represented by two generalized coordinates alpha and beta. The axis1 body is a slave to the axis2 body with two degrees of rotational freedom. The origins of the two axes are constrained to be coincident, and the axes are constrained to be orthogonal. The symbol alpha represents the angle between axis1 and the reference direction of axis2, and beta represents the angle between axis2 and the reference direction of axis1. ;[s] 30:0,0;18,1;38,2;39,3;51,4;52,5;54,6;55,7;66,8;68,9;184,10;189,11;194,12;198,13;204,14;209,15;233,16;238,17;406,18;411,19;441,20;446,21;478,22;483,23;489,24;493,25;523,26;528,27;560,28;565,29;566,-1; 30:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] Note that GenOrthoRevolute4 actually adds two DOF to the model, as opposed to constraining four. ## See also: OrthoRevolute4. ;[s] 5:0,0;10,1;27,2;112,3;126,4;127,-1; 5:1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenRevolute2 2D ;[s] 3:0,0;12,1;18,2;20,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenRevolute2[cnum, axis1, axis2, {sym, guess}] returns a constraint object that introduces a slave body into the model represented by a single generalized coordinate sym. The axis1 body is a slave to the axis2 body with one degree of rotational freedom. The origins of the two axes are constrained to be coincident, and the counterclockwise angle from axis2 to axis1 is represented by sym. ;[s] 18:0,0;13,1;33,2;34,3;44,4;46,5;166,6;169,7;175,8;180,9;204,10;209,11;353,12;358,13;362,14;367,15;386,16;389,17;390,-1; 18:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] Note that GenRevolute2 actually adds one DOF to the model, as opposed to constraining two DOF like Revolute2. ## See also: Revolute2. ;[s] 7:0,0;10,1;22,2;99,3;108,4;125,5;134,6;135,-1; 7:1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenRevolute5 3D ;[s] 3:0,0;12,1;18,2;20,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenRevolute5[cnum, axis1, axis2, {sym, guess}] returns a constraint object that introduces a slave body into the model represented by a single generalized coordinate sym. The axis1 body is a slave to the axis2 body with one degree of rotational freedom. The two axes are constrained to be parallel and their origins are constrained to be coincident. The angle from the projection of the reference direction of axis2 to that of axis1, in the right-hand sense, is represented by sym. ;[s] 18:0,0;13,1;33,2;34,3;44,4;46,5;166,6;169,7;175,8;180,9;204,10;209,11;410,12;415,13;427,14;432,15;477,16;480,17;481,-1; 18:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] Note that GenRevolute5 actually adds one DOF to the model, as opposed to constraining five. ## See also: Revolute5. ;[s] 5:0,0;10,1;22,2;107,3;116,4;117,-1; 5:1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenTranslate2 2D ;[s] 3:0,0;13,1;19,2;21,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenTranslate2[cnum, axis1, axis2, {sym, guess}] returns a constraint object that introduces a slave body into the model represented by a single generalized coordinate sym. The axis1 body is a slave to the axis2 body with one degree of translational freedom. The two axes are constrained to be colinear, and the distance from the origin of axis2 to that of axis1, in the direction of axis2, is represented by sym. ;[s] 20:0,0;14,1;34,2;35,3;45,4;47,5;167,6;170,7;176,8;181,9;205,10;210,11;339,12;344,13;356,14;361,15;383,16;388,17;408,18;411,19;412,-1; 20:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] Note that GenTranslate2 actually adds one DOF to the model, as opposed to constraining two DOF like Translate2. ## See also: Translate2. ;[s] 7:0,0;10,1;23,2;100,3;110,4;127,5;137,6;138,-1; 7:1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] GenTranslate5 3D ;[s] 3:0,0;13,1;19,2;21,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] GenTranslate5[cnum, axis1, axis2, {sym, guess}] returns a constraint object that introduces a slave body into the model represented by a single generalized coordinate sym. The axis1 body is a slave to the axis2 body with one degree of translational freedom. The two axes are constrained to be colinear, and the distance from the origin of axis2 to that of axis1, in the direction of axis2, is represented by sym. The projections of the reference directions of the two axes are constrained to be parallel. ;[s] 20:0,0;14,1;34,2;35,3;45,4;47,5;167,6;170,7;177,8;182,9;206,10;211,11;341,12;346,13;358,14;363,15;385,16;390,17;410,18;413,19;507,-1; 20:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup] Note that GenTranslate5 actually adds one DOF to the model, as opposed to constraining five. ## See also: Translate2. ;[s] 5:0,0;10,1;23,2;108,3;118,4;119,-1; 5:1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; :[font = subsubsection; inactive; preserveAspect; startGroup] JoinRows 2D/3D ;[s] 3:0,0;8,1;15,2;20,-1; 3:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = text; inactive; preserveAspect] JoinRows[mat1, mat2, ...] returns a new matrix composed of the mati with their rows joined. The mati must all have the same number of rows. ;[s] 8:0,0;9,1;24,2;25,3;63,4;67,5;97,6;101,7;140,-1; 8:1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,Courier,1,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0;1,0,0 ,times,2,14,0,0,0;1,0,0 ,times,0,14,0,0,0; :[font = smalltext; inactive; preserveAspect; endGroup; endGroup; endGroup] JoinRows effectively joins matrices left-to-right, instead of top-to-bottom. ## See also: Join, MapThread. ;[s] 6:0,0;8,1;92,2;96,3;98,4;107,5;108,-1; 6:1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0;1,0,0 ,Courier,1,12,0,0,0;1,0,0 ,times,0,12,0,0,0; ^*)