<?xml version="1.0" encoding="iso-8859-1"?>
<!--  bobwb/skew/skew.xml  Paper on nonlinear programming and skew prisms -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" 
          "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd"
          [<!ENTITY mathml "http://www.w3.org/1998/Math/MathML">]>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=iso-8859-1"/>
<title>
Robert Burkhardt:
Application of Nonlinear Programming to Tensegrity
</title>
<meta name="keywords"
      content="tensegrity, floating compression, validation, skew, prism,
               nonlinear programming, design, architecture"/>
<link rel="stylesheet" type="text/css" href="skew.css"/>
</head>

<body>
<div class="center">
<h2>
The Application of Nonlinear Programming to the<br/>
Design and Validation of Tensegrity Structures<br/>
with Special Attention to Skew Prisms
</h2>
Robert Burkhardt, Tensegrity Solutions<br/>
Box 426164, Cambridge, MA  02142-0021<br/>
USA<br/><br/>
e-mail:
<a href="mailto:bobwb@juno.com?subject=Nonlinear Programming and Skew Prisms">
bobwb@juno.com</a><br/><br/>
<a href="revisions.html" id="revisions">Version 3.06</a><br/>
February 23, 2006<br/><br/>
<a href="skew.pdf">Document in PDF format</a><br/><br/>
<b>Abstract</b>
</div>

<table class="abstract"><tr><td>
The application of nonlinear programming to the validation and
design of floating-compression tensegrity structures is
motivated and described.  A design for a skew three-prism
is validated using nonlinear programming.
A general and simple nonlinear programming method for designing skew prisms
is described.  The method is applied to the design of a skew three-prism.
Validation of a design for a skew four-prism fails.
Alternatives for fixing the design are explored.
Nonlinear programming problem solutions indicate that
skew prisms with equilateral ends can be designed using
simple non-iterative closed-form formulas.
A revision history for this paper can
be found at <a href="http://bobwb.tripod.com/skew/revisions.html">
<tt>http://bobwb.tripod.com/skew/revisions.html</tt></a>.

<table class="center">
<tr valign="top"><td>Keywords:</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>tensegrity, floating compression, validation, skew, prism,
nonlinear programming, design
</td></tr></table>
</td></tr></table>

<p id="sec1"><big>
<b>1 Introduction</b>
</big></p>

<p>
Floating-compression tensegrity structures were introduced by
Kenneth Snelson<a id="Lalvani96A" href="#Lalvani96B">[6]</a>,
Buckminster Fuller<a id="Fuller73A" href="#Fuller73B">[4]</a> and
David Georges Emmerich<a id="Emmerich88A" href="#Emmerich88B">[3]</a>.
<a href="#fig1">Figure&nbsp;1</a> illustrates a simple example.
It manifests three defining characteristics of
floating-compression tensegrity structures:
</p>

<ul>
<li>It is pin-jointed.</li>
<li>At each joint, only one strut is present.</li>
<li>Purely tensile elements are critical to the structure's stability --
removing or loosening any of the critical tensile elements
destabilizes the structure.</li>
</ul>

<p>
In addition, although this is not readily evident in
<a href="#fig1">Figure&nbsp;1</a>, the structure is prestressed.
</p>

<p>
Floating-compression tensegrity structures
pose a special problem for the designer:
if the length of a tendon chosen to connect two joints is not as short as
possible given the lengths of the other struts and tendons,
the tendon will be loose and the structure will not be stable.
In addition, if the length of a strut chosen to connect two joints is
not as long as possible given the lengths of the other struts and tendons,
the strut will be loose and the structure will not be stable.
Although the instability caused by a single incorrectly chosen member
length can be very local for structures like large double-layer domes,
in any case the relative positions of the joints
in a design must be carefully chosen so all tendons are minimum
length and all struts are maximum length if those relative positions
are to be maintained in any realization.
</p>

<p>
This conception of floating-compression tensegrity structures makes the
simplifying assumption that the members of the structure are completely
inelastic.  A floating-compression design realized using highly elastic
tendons will have much more latitude in specifying the relative positions
of the joints.  However, realizations of such a design will most
likely not precisely duplicate the relative positions of the joints, if
indeed the positions of the joints are precisely described at the
design stage.  Such designs and realizations may be suitable for
early prototyping explorations
(see Ref.&nbsp;<a id="Popovic03A" href="#Popovic03B">[8]</a> for an example).
Once the basic topology of a
floating-compression design is understood, even in the case where highly
elastic tendons are used in the final realization, the precise control
of design realizations make the inelasticity assumption at the form-finding
stage of design very useful.
</p>

<p>
The methodology of nonlinear programming is mature and
well understood.<a id="Bertsekas99A" href="#Bertsekas99B">[1]</a>
It is mentioned briefly as a method for form-finding for
tensegrity structures in Tibert and
Pelligrino<a id="Tibert03A" href="#Tibert03B">[9]</a>
and examined in detail as a tensegrity form-finding methodology in
Burkhardt<a id="Burkhardt05A" href="#Burkhardt05B">[2]</a>.
The basic nonlinear programming problem is to minimize
a scalar-valued nonlinear function of several variables while conforming
to zero or more constraints.  Each constraint requires
a scalar-valued nonlinear function of these variables, and possibly additional
variables, to satisfy an equality or inequality relationship
with respect to some constant target value.  All the variables,
the ones that appear in the objective function along with others
that possibly appear only in constraints,
are referred to as control variables.
</p>

<p>
Bertsekas<a href="#Bertsekas99B">[1]</a>
and
Burkhardt<a href="#Burkhardt05B">[2]</a>
describe procedures for solving this problem.
In Burkhardt, the constrained problem is transformed into an unconstrained
problem using either a penalty method or what is called in Burkhardt
an "exact" method.  Minimization iterations are then done using
conjugate direction techniques when far away from a solution to the
nonlinear programming problem, or the multivariate form of the Newton
method when close to a solution.  Newton iterations are done close to a
solution since they offer the best accuracy.  See Bertsekas for a
detailed description of conjugate direction and Newton techniques.
Conjugate direction methods involve a sequence of line searches,
while the multivariate Newton method involves the solution of simultaneous
equations.  In a line search, a specific line is chosen emanating from
the current variable values, and a point along that line where the
objective function achieves a minimum value is found.  The specific
conjugate direction method being used will specify how successive
line-search directions should be chosen so that convergence to a minimum
solution for the programming problem is rapid.
</p>

<p>
The exact method is described in Burkhardt
and involves solving the constraints for a carefully chosen subset
of the control variables.  The number of variables in this subset
will be the same as the number of constraints.
The variables in the complement of this
subset are then used as control variables for the unconstrained problem.
This partitioning of the control variables is dynamic and usually changes
in the course of solving the problem as the configuration of the structure
changes.  Newton's method is used to solve the constraints.  Since Newton's
method many times will not converge when the values are not close
to a solution for the constraint equations, there is usually an upper bound
on the step sizes which can be used when doing line searches required by
the conjugate-direction being used.
The exact method involves two levels of iteration:  at the lower
level, Newton iterations are used to solve the constraint equations;
at the higher level, conjugate direction iterations are used to move
the variable values toward a minimum solution for the nonlinear programming
problem.
</p>

<p>
In many situations, the initial values for the nonlinear programming problem
may be such that some or all of the constraint equations are not satisfied.
It is very possible that these initial values are far enough away from a
solution for the constraint equations
that the Newton iterations used to solve the constraint equations
will not converge.  In these cases, the exact method
is therefore not feasible for the initial conjugate direction line searches;
so, the penalty method must be used instead of the exact method to convert the
constrained problem to an unconstrained one that the conjugate direction
line searches can be applied to.  After a sufficient number of line searches
are done using the penalty method, the variables will be close enough to
solving the constraint equations and Newton iterations to solve the
constraint equations will converge.  This allows the exact method
to be used though certainly iterations can continue using the penalty
method.  Exploring under exactly what circumstances, if any, the penalty method
should be discarded in favor of the exact method would probably be useful,
but is beyond the scope of this paper.  Convergence speed and solution
accuracy would be two important factors to consider.
The penalty method and Newton method are described in Bertsekas.
</p>

<p>
Burkhardt (Section 7.2.6) also
presents a proof that any tensegrity structure can be viewed
as the solution of a nonlinear programming problem, thus
demonstrating the generality of nonlinear programming
as a method for tensegrity form finding.
Nonlinear programming seems a good fit
for the design of floating-compression tensegrity structures,
since, as mentioned, the stability of these structures requires
that certain extremal conditions be met.
The details of adapting nonlinear programming to
the analysis and design of tensegrity structures are described below.
Using a pedagogical technique similar to that of
Motro&nbsp;<i>et&nbsp;al.</i><a id="Motro94A" href="#Motro94B">[7]</a>,
this paper examines the application of nonlinear programming
methodology to the creation and validation of tensegrity designs
in the context of detailed examples pertaining to skew prisms.
In the process, it comments on results in Motro&nbsp;<i>et&nbsp;al.</i> and
presents a general method for the design of skew prisms using
nonlinear programming.
</p>

<p id="sec2"><big>
<b>2 Validation of a Skew Prism Design Using Nonlinear Programming</b>
</big></p>

<p>
Regular tensegrity prisms are described and mathematically examined in
Kenner<a id="Kenner76A" href="#Kenner76B">[5]</a>.
Skew tensegrity prisms were introduced in
Motro&nbsp;<i>et&nbsp;al.</i><a href="#Motro94B">[7]</a>.
Due to symmetry, the points of the two ends
of a regular tensegrity prism fall into two parallel planes.
For the purposes of this paper, skew tensegrity
prisms will be restricted to retain this feature.
Regular tensegrity prisms are viewed as a special sort
of skew prism where a perpendicular through the center of
one end of the prism is parallel to, and coincident with,
a perpendicular through the center of the other end.
For a prism to be strictly skew, the perpendiculars are still parallel,
but are not coincident.
A skew three-prism is illustrated in <a href="#fig1">Figure&nbsp;1</a>.
The vertices are labeled the same as in Fig.&nbsp;5
of Motro&nbsp;<i>et&nbsp;al.</i>.  Member labels have also been added.
Member names correspond to those used in Motro&nbsp;<i>et&nbsp;al.</i>.
</p>

<p>
Motro&nbsp;<i>et&nbsp;al.</i> explored
the application of the force-density method of form-finding for tensegrity
structures to the design of skew prismatic systems.  That paper presented
results for two skew-prism designs.  The problem for a researcher
attempting to independently validate these designs is that the validity
of the designs cannot be ascertained by merely viewing them.
The geometry of the structure must be tested to see if it meets
the extremal criteria appropriate to a floating-compression tensegrity
structure.  Here it is shown how nonlinear programming can be
applied to do this validation.
</p>

<p>
In a nonlinear programming problem, the value of the objective function
is minimized subject to certain constraints.  The necessary condition
for stability of a tensegrity structure can be precisely fitted into
this format.  To validate a design, the objective
function is the length of a single member.  The constraints are the lengths
of the other members of the structure as specified in the design.
</p>

<p>
For a valid tensegrity structure, the length that results from solving
the nonlinear programming problem should match the length
specified by the design.
First consider the case when the member is a tendon.
If the length specified by the design is significantly smaller
than the solution length, then the design is not feasible and hence invalid.
If the length specified by the design is significantly larger,
then the tendon will
be loose since the solution to the nonlinear programming problem has
shown that a smaller length is feasible, hence the other elements can
move around to loosen the tendon.  The design is invalid since
the tendon is not prestressed.
</p>

<p>
For the case when a strut length appears in the objective function, it
appears as the additive inverse of the value.  Thus when the objective
function value is minimized, the strut length is maximized.
If the length specified by the
design is significantly larger than the solution length, then the design
is not feasible and hence invalid.
If the length specified by the design is significantly smaller, then
the strut will be loose since the solution has shown that a larger
length is possible.  The design is invalid since some
tendons will not be prestressed as a consequence of the loose strut.
</p>

<p>
For the skew three-prism from Motro&nbsp;<i>et&nbsp;al.</i>,
the stated results from the application of the force-density method were
verified by solving the following mathematical programming problem:
</p>

<p class="center">
<math xmlns="&mathml;"><mtable>
<mtr><mtd><mtext>minimize</mtext></mtd>
<mtd>
 <msubsup><mi>l</mi><mtext>4(c)</mtext><mn>2</mn></msubsup>
 </mtd></mtr>

 <mtr><mtd><mrow><msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
 <mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>6</mn></msub>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd></mtr>

 <mtr><mtd><mtext>subject to</mtext></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>1(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>2(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>3(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.641</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>5(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.360</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>6(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd>
 <mtd><mtext>Strut constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2.024</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>7(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2.161</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>8(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.969</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>9(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>10(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>11(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>12(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd><mtd><mtext>Orienting constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>y</mo><mn>6</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>4</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>5</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>6</mn></msub><mo>=</mo>
 <mn>0</mn>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>x</mo><mn>6</mn></msub><mo>=</mo>
 <msqrt><mfrac><mn>1</mn><mn>3</mn></mfrac></msqrt>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>y</mo><mn>5</mn></msub><mo>=</mo>
 <mfrac><mn>1</mn><mn>2</mn></mfrac>
 </mrow></mtd></mtr>
</mtable>
</math>
</p>

<p>
The notation
<math xmlns="&mathml;">
<msub><mi>l</mi><mtext>x</mtext></msub>
</math>
is used to indicate the length of member x.
For example,
<math xmlns="&mathml;">
<msub><mi>l</mi><mtext>4(c)</mtext></msub>
</math>
indicates the length of member 4(c).  The value of
<math xmlns="&mathml;">
<msub><mi>l</mi><mtext>4(c)</mtext></msub>
</math>
is the distance between the endpoints of 4(c),
<math xmlns="&mathml;">
<msub><mi>P</mi><mn>3</mn></msub>
</math>
and
<math xmlns="&mathml;">
<msub><mi>P</mi><mn>5</mn></msub>
</math>
(see <a href="#tab1">Table&nbsp;1</a>).
The values for the lengths of the other members are computed similarly.
In this case, the member chosen for the objective function is a tendon.
If the member were a strut, since the convention is to always minimize
the objective value, the negation of its length would be minimized, thus
maximizing the length of the strut.
</p>

<p>
The expression
<math xmlns="&mathml;"><mrow><msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
 <mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>6</mn></msub>
</mrow></math>
appearing under "minimize" indicates
that the coordinate values of the six vertex points for the prism
are the control variables of the minimization
problem.  These are the values that are changed (in accordance with
the constraints) to find a minimum value for the objective function,
<math xmlns="&mathml;">
<msubsup><mi>l</mi><mtext>4(c)</mtext><mn>2</mn></msubsup>
</math> in this case.
</p>

<p>
The member constraints are always stated as inequalities.
A strut must maintain a certain minimum distance between two joints,
so its constraint states that the strut's length must be greater than
or equal to a constant target value.
A tendon must keep two joints within a certain distance of each other,
so its constraint states that the tendon's length must be less than
or equal to a constant target value.
During computation, for convenience, the constraints are treated here
as equalities.  This means the result needs to be checked for correctness.
This is done easily when member stresses are computed.  If a tendon
appears to be in compression, or a strut appears to be in tension, then
either the relevant constraint and corresponding member is discarded,
or the target value is adjusted.  The problem is then solved again to see
if a more satisfactory solution can be obtained.
</p>

<p>
Base members 10(c), 11(c) and 12(c) do not appear explicitly in
Motro&nbsp;<i>et&nbsp;al.</i>, but are added here for completeness.  The
orienting constraints do not constrain the geometry of the prism,
but just give the structure an unambiguous orientation
in three-dimensional space.
Member lengths are always expressed as second powers since
this is more mathematically tractable.  Simple lengths could
be used with exactly the same results, but the computationally
expensive process of taking roots would be required and unnecessarily
complicate and slow the computations.
</p>

<p>
Initial values for the coordinates are needed to start off the
iteration procedure.  In general, the initial coordinate values
are a reasonable and easily computed initial guess.  The closer
the initial guess is to the final answer, and the closer the implied
member lengths are to the constraint target values,
the faster the answer will be arrived at.
For the nonlinear programming problem
described in this section, the coordinate values for the vertices of a
regular solid triangular prism constituted the initial values for the
problem.  The radius and height of the solid triangular prism
were chosen so the implied member lengths roughly approximated the
constraint target values.  The initial values used can be found
in the columns labeled "Initial" in <a href="#tab1a">Table&nbsp;2</a>.
</p>

<p>
The solution of the problem yielded a value of 1.303 for
<math xmlns="&mathml;">
<msub><mi>l</mi><mtext>4(c)</mtext></msub>
</math>.  The difference between this and the value of 1.302 stated in
Motro&nbsp;<i>et&nbsp;al.</i> can be attributed to the effects of rounding.
Applying the procedures described in Section&nbsp;7.2 of
Burkhardt<a href="#Burkhardt05B">[2]</a> to
derive member stresses also yielded values equivalent to those stated in
Motro&nbsp;<i>et&nbsp;al.</i> within &plusmn;.006.
The final values for the member lengths and stresses
can be found in the columns labeled "(V)" of
<a href="#tab1">Table&nbsp;1</a>.
<a href="#tab1">Table&nbsp;1</a> also duplicates
the relevant data from Motro&nbsp;<i>et&nbsp;al.</i>
in the columns labeled "(M)".
For reference, the force density values from that paper are also listed.
The proportionality constant t appears next to all stress
values since only relative values have any meaning in a prestressed structure.
The final coordinate values can be found in
the columns labeled "(V)" in <a href="#tab1a">Table&nbsp;2</a>.
The final coordinate values were used to construct
<a href="#fig1">Figure&nbsp;1</a>.
</p>

<p id="sec3"><big>
<b>3 Design of a Skew Prism Using Nonlinear Programming</b>
</big></p>

<p>
The above result validated the force-density result, but did not show
how a skew prism could be realistically designed using the nonlinear
programming approach.
With this in mind, a general method is proposed for designing skew
prisms of any order.  The members are conceptually divided into
end members and side members.  The end members are all tendons,
and so can be referred to as end tendons as well.
The side members are either struts or side tendons.
The method is to constrain any three side member lengths,
and then minimize the
sum of second powers of the remaining side-tendon lengths less the
sum of second powers of the remaining strut lengths.  All end tendon
lengths are always constrained.
</p>

<p>
The constraints must be mutually compatible.  For example,
if a side tendon length and an adjacent strut length are constrained,
the strut length must not be so long that it is greater than the
side tendon's constrained length plus the length of the end tendon
they both share.  (A side tendon is adjacent to a strut if it shares
a vertex with the strut.)
It is usually most convenient to constrain strut lengths,
but, for the purposes of demonstrating the method, two strut lengths and
a side tendon length are constrained in the example below.
The formulation of the nonlinear programming
problem for the design of a skew three-prism is thus:
</p>

<p class="center">
<math xmlns="&mathml;"><mtable>
<mtr><mtd><mtext>minimize</mtext></mtd>
<mtd>
 <mrow>
 <msubsup><mi>l</mi><mtext>5(c)</mtext><mn>2</mn></msubsup>
 <mo>+</mo>
 <msubsup><mi>l</mi><mtext>6(c)</mtext><mn>2</mn></msubsup>
 <mo>-</mo>
 <msubsup><mi>l</mi><mtext>7(s)</mtext><mn>2</mn></msubsup>
 </mrow>
 </mtd></mtr>

 <mtr><mtd><mrow><msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
 <mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>6</mn></msub>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd></mtr>

 <mtr><mtd><mtext>subject to</mtext></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>1(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>2(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>3(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.3</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>4(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mtext>Strut constraint:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>8(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>9(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>10(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>11(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>12(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd><mtd><mtext>Orienting constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>y</mo><mn>6</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>4</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>5</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>6</mn></msub><mo>=</mo>
 <mn>0</mn>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>x</mo><mn>6</mn></msub><mo>=</mo>
 <msqrt><mfrac><mn>1</mn><mn>3</mn></mfrac></msqrt>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>y</mo><mn>5</mn></msub><mo>=</mo>
 <mfrac><mn>1</mn><mn>2</mn></mfrac>
 </mrow></mtd></mtr>
</mtable>
</math>
</p>

<p>
In general, when nonlinear programming is applied to design
rather than validation, a weighted sum of second powers of
member lengths appears in the objective function instead of
the second power of the length of a single member.
The weights, the constraint target values and how the members
are divided between the objective function and the constraints
are chosen according to the design objectives.
When nonlinear programming is applied to the design of skew prisms,
the weights in the objective function are either
1 or -1 depending on whether the member is a tendon or a strut,
and, in accordance with the design methodology described,
all the end tendons and three side members have constrained
lengths and the other member lengths appear in the objective function.
</p>

<p>
For the sake of illustrating the method, the target values for the
two constrained strut lengths and side tendon length
in this new model are chosen to be somewhat different from the lengths given in
Motro&nbsp;<i>et&nbsp;al.</i><a href="#Motro94B">[7]</a>.
If the target values for the constrained member lengths are chosen
to have exactly the same values as in Motro&nbsp;<i>et&nbsp;al.</i>,
then the solution yields the same values as in
Motro&nbsp;<i>et&nbsp;al.</i> for the lengths of the members in
the objective function with the exception of member 5(c)
where the length rounds to 1.642 rather than 1.641.
This shows that the skew three-prism from Motro&nbsp;<i>et&nbsp;al.</i>
also validates as a skew prism in addition to validating as a tensegrity
structure.
</p>

<p>
The final coordinate values for the previous model were used as the initial
coordinate values for this new model.  In general,
when a new model differs little from a previous model,
the final values for the previous model usually make
good initial values for the new model.
To check that the solution was independent of the initial values,
the problem was solved a second time using the initial values for the
previous model as the initial values for this new model.
Independence of initial values was a concern here since previous
versions of the design algorithm yielded solutions that were dependent on the
choice for the initial values.  With previous versions of the
design algorithm, the results were valid tensegrity structures,
but a determinant algorithm with
repeatable results, independent of initial values chosen, was desired.
</p>

<p>
The length and stress values obtained in the solution of the
new nonlinear programming problem can be found in the
columns labeled "(D)" of <a href="#tab1">Table&nbsp;1</a>.
The stress values are scaled differently than for the
validation (see the columns labeled "(V)" for the latter values)
and point up the interesting fact
that for skew prisms the stresses in the side members appear to be exactly
proportional to their relative lengths.  In addition, it is curious
that all the end tendons have equal stress since this
is unexpected in an asymmetric structure.
Finally, it is notable that the twist angle
of one end of the prism relative to the other exactly matches
the twist angle for a regular, non-skew prism.
(Kenner<a href="#Kenner76B">[5]</a>, p.&nbsp;8,
has a detailed description of the twist-angle concept.
The twist angle formula is
<math xmlns="&mathml;"><mrow>
<mi>&theta;</mi><mo>=</mo><mn>90&deg;</mn><mo>-</mo>
<mfrac><mn>180&deg;</mn><mi>N</mi></mfrac>
</mrow></math>
where &theta; is the twist angle, that is the angle -- in cylindrical
coordinates -- traversed by a side tendon as it goes from one end
of the prism to the other, and N is the order of the prism.
For a three-prism, this formula gives a value of 30&deg; for the
twist angle.  For a four-prism, it gives a value of 45&deg;.
Kenner attributes the discovery of the twist-angle formula
to Roger Tobie.<a href="#Tobie67B" id="Tobie67A">[10]</a>)
The final coordinate values can be found in the
columns labeled "(D)" of <a href="#tab1a">Table&nbsp;2</a>.
</p>

<p id="sec4"><big>
<b>4 Validation of a Skew Four-Prism Design</b>
</big></p>

<p>
The validation of the results given in
Motro&nbsp;<i>et&nbsp;al.</i><a href="#Motro94B">[7]</a> for the
skew four-prism was more problematic.  Fig.&nbsp;6 from that paper
is reproduced here as <a href="#fig2">Figure&nbsp;2</a>.
An initial validation of those results was
attempted via the following mathematical programming problem:
</p>

<p class="center">
<math xmlns="&mathml;"><mtable>
<mtr><mtd><mtext>minimize</mtext></mtd>
<mtd>
 <msubsup><mi>l</mi><mtext>16(c)</mtext><mn>2</mn></msubsup>
 </mtd></mtr>

 <mtr><mtd><mrow><msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
 <mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>8</mn></msub>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd></mtr>

 <mtr><mtd><mtext>subject to</mtext></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>1(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>2(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>3(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>4(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.118</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>5(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.718</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>6(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.118</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>7(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.718</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>8(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd>
 <mtd><mtext>Strut constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2.516</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>9(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.500</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>10(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2.516</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>11(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.500</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>12(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.824</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>13(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.824</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>14(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.824</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>15(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd><mtd><mtext>Orienting constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mfrac><mrow><msub><mo>x</mo><mn>1</mn></msub><mo>+</mo>
              <msub><mo>x</mo><mn>3</mn></msub></mrow><mn>2</mn></mfrac>
 <mo>=</mo>
 <mfrac><mrow><msub><mo>y</mo><mn>1</mn></msub><mo>+</mo>
              <msub><mo>y</mo><mn>3</mn></msub></mrow><mn>2</mn></mfrac>
 <mo>=</mo>
 <msub><mo>y</mo><mn>8</mn></msub><mo>=</mo>
 <mn>0</mn>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mfrac><mrow><msub><mo>x</mo><mn>6</mn></msub><mo>+</mo>
              <msub><mo>x</mo><mn>8</mn></msub></mrow><mn>2</mn></mfrac>
 <mo>=</mo>
 <mfrac><mrow><msub><mo>y</mo><mn>6</mn></msub><mo>+</mo>
              <msub><mo>y</mo><mn>8</mn></msub></mrow><mn>2</mn></mfrac>
 <mo>=</mo>
 <mfrac><mrow><msub><mo>z</mo><mn>6</mn></msub><mo>+</mo>
              <msub><mo>z</mo><mn>8</mn></msub></mrow><mn>2</mn></mfrac>
 <mo>=</mo>
 <mn>0</mn>
 </mrow></mtd></mtr>
</mtable>
</math>
</p>

<p>
Base members 13(c), 14(c), 15(c) and 16(c) do not appear explicitly in
Motro&nbsp;<i>et&nbsp;al.</i>, but are added here for completeness.
Initial values for the point coordinates were computed using the
procedure described in <a href="#sec2">Section&nbsp;2</a> except
a regular solid square prism was used instead of a triangular prism.
The initial coordinate values can be found in the
columns labeled "Initial" in <a href="#tab2a">Table&nbsp;5</a>.
</p>

<p>
The solution of this problem yielded a value of 1.824 for
<math xmlns="&mathml;">
<msub><mi>l</mi><mtext>16(c)</mtext></msub>
</math>.  However, unlike Fig.&nbsp;6 from Motro&nbsp;<i>et&nbsp;al.</i>,
both ends of the prism are rhombic instead of one end being
square, and neither end is planar in configuration.
This result is illustrated in <a href="#fig3">Figure&nbsp;3</a>.
It is not a skew prism by the definition given at the
beginning of <a href="#sec2">Section&nbsp;2</a> since
the ends are highly non-planar.  In addition, it exhibits a
two-fold symmetry about its central axis so it could never
fulfill the non-coincident perpendicular criterion for strict skewness.
The length and stress data for the structure are summarized in
the columns labeled "(V)" of Tables
<a href="#tab2l">3</a> and <a href="#tab2s">4</a>.
The relevant data from
Motro&nbsp;<i>et&nbsp;al.</i> are summarized in the columns labeled "(M)".
The final coordinate values can be found in
the columns labeled "(V)" in <a href="#tab2a">Table&nbsp;5</a>.
</p>

<p>
It should also be noted that, unlike the procedure for the
skew three-prism, for the four-prism the tendons on
one end of the prism could not be assumed to have the same lengths
as the tendons on the other end.
For one end of the prism, the tendon lengths are over
twice as large as the lengths for the other end.
A solution cannot be obtained otherwise.
The value of 1.824 for the constraints on the lengths
of the base tendons was chosen after experimentation.
This value was selected because it yielded a solution
where all the base tendons had equal length.
The initial and most reasonable guess for the lengths of the base
tendons 13(c), 14(c) and 15(c) would be 1.0,
but this value is not feasible given the constraints listed.
The approximate minimum feasible common value for the
lengths of these three tendons is 1.67.  At this value,
the length for 16(c), 2.67, is much larger
than its companions when the nonlinear programming problem
was solved.
</p>

<p>
To specify the programming problem so all the base tendons have equal length,
a meta-constraint was introduced and solved.  Additional constraints
beyond member-length and orienting constraints cannot appear directly
in the nonlinear programming problem since they will invalidate the
solution.  When such additional constraints are desired, it is often
possible to apply them outside of the nonlinear programming problem,
and in this context they are referred to here as meta-constraints.
Their solution involves another higher level of iteration.
</p>

<p>
In this case, the meta-constraint value was computed
as the difference between the common target value for the lengths of
13(c), 14(c) and 15(c) and the solution of the nonlinear programming
problem for the length of 16(c) which results from solving the problem
using the common target value.  The target value for the meta-constraint
was zero.  The control variable for this meta-problem was
the common target value for the constraints controlling
the lengths of 13(c), 14(c) and 15(c).
The control variable was adjusted until
the meta-constraint was satisfied, and thus the value 1.824 was obtained.
Newton's method is a typical technique for solving the meta-problem.
</p>

<p>
In general, the meta-constraint method treats the solution to the nonlinear
programming problem as a vector-valued, multivariate function whose input
is the member and orienting constraint target values, and whose output is the
point coordinate values, the points being
<math xmlns="&mathml;"><mrow>
<msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
<mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>8</mn></msub>
</mrow></math>
in this case.
Meta-constraints can then be applied by using Newton's method,
or perhaps another method, to adjust the constraint target values so the
meta-constraint values, all functions of
<math xmlns="&mathml;"><mrow>
<msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
<mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>8</mn></msub>
</mrow></math>,
are equal to their target values.  When the exact method is being used, this
represents a third level of iteration; when the penalty method is being used,
it represents a second level of iteration.
</p>

<p>
Another approach to validating the Motro&nbsp;<i>et&nbsp;al.</i> skew
four-prism design would be to assume the base of the tensegrity
is fixed to a planar surface.  However, if the
base tendons are constrained to be coplanar and
arranged in a square or rhombus, then the rhombus formed by the
explicit tendons of the other end only becomes more
folded.  It is difficult to know what to assume here
about the lengths of the base tendons, but no assumption
seems to allow the results in Motro&nbsp;<i>et&nbsp;al.</i> to be duplicated
in a way that is compatible with both the tabular data and figures.
In addition, while this procedure duplicated the member lengths stated
in Motro&nbsp;<i>et&nbsp;al.</i>, the implied stresses were very different:
if each set of figures (that is, the data for the first 12
members for the "Stress" columns "(M)" and "(V)" of
<a href="#tab2s">Table&nbsp;4</a>)
is normalized so the absolute values sum to one
(see the "Normalized Stress" columns of <a href="#tab2s">Table&nbsp;4</a>),
the weighted average difference is 30 percent
(see the "Percent Difference" column of <a href="#tab2s">Table&nbsp;4</a>;
for each member, the weight is the absolute value of the sum
of its two normalized stress entries).
</p>

<p id="sec4a"><big>
<b>5 An Alternative Skew Four-Prism Design</b>
</big></p>

<p>
As an alternative to the above approach to the four-prism,
the method described in <a href="#sec3">Section&nbsp;3</a> can be applied
to yield a prism much more in the spirit of the skew three-prisms examined in
Sections <a href="#sec2">2</a> and <a href="#sec3">3</a>.
This four-prism is illustrated in <a href="#fig4">Figure&nbsp;4</a>.
The method of <a href="#sec3">Section&nbsp;3</a> is applied by constraining
the lengths of the struts 9(s), 10(s) and 11(s).
The lengths used for the constraint target values are
the ones specified for the four-prism design presented
in Motro&nbsp;<i>et&nbsp;al.</i><a href="#Motro94B">[7]</a>
An important difference between this structure
and the one described in Motro&nbsp;<i>et&nbsp;al.</i> is that
the struts are arranged so the two long struts are adjacent
to each other rather than opposite each other.
The programming problem solved was:
</p>

<p class="center">
<math xmlns="&mathml;"><mtable>
<mtr><mtd><mtext>minimize</mtext></mtd>
<mtd>
 <mrow>
 <msubsup><mi>l</mi><mtext>5(c)</mtext><mn>2</mn></msubsup>
 <mo>+</mo>
 <msubsup><mi>l</mi><mtext>6(c)</mtext><mn>2</mn></msubsup>
 <mo>+</mo>
 <msubsup><mi>l</mi><mtext>7(c)</mtext><mn>2</mn></msubsup>
 <mo>+</mo>
 <msubsup><mi>l</mi><mtext>8(c)</mtext><mn>2</mn></msubsup>
 <mo>-</mo>
 <msubsup><mi>l</mi><mtext>12(s)</mtext><mn>2</mn></msubsup>
 </mrow>
 </mtd></mtr>

 <mtr><mtd><mrow><msub><mi>P</mi><mn>1</mn></msub><mo>,</mo>
 <mo>&hellip;</mo><mo>,</mo><msub><mi>P</mi><mn>8</mn></msub>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd></mtr>

 <mtr><mtd><mtext>subject to</mtext></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>1(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>2(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>3(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>0.901</mn><mn>2</mn></msup>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>4(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd>
 <mtd><mtext>Strut constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2.516</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>9(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>2.516</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>10(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msup><mn>1.500</mn><mn>2</mn></msup>
 <mo>&le;</mo>
 <msubsup><mi>l</mi><mtext>11(s)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd>
 <mtd><mtext>Tendon constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>13(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>14(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>15(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <mn>1</mn>
 <mo>&ge;</mo>
 <msubsup><mi>l</mi><mtext>16(c)</mtext><mn>2</mn></msubsup>
 </mrow></mtd></mtr>

 <mtr><mtd></mtd><mtd><mtext>Orienting constraints:</mtext></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>y</mo><mn>6</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>6</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>7</mn></msub><mo>=</mo>
 <msub><mo>y</mo><mn>8</mn></msub><mo>=</mo>
 <msub><mo>z</mo><mn>8</mn></msub><mo>=</mo>
 <mn>0</mn>
 </mrow></mtd></mtr>
 <mtr><mtd></mtd><mtd><mrow>
 <msub><mo>x</mo><mn>8</mn></msub><mo>=</mo>
 <mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac>
 </mrow></mtd></mtr>
</mtable>
</math>
</p>

<p>
The initial values used for the coordinates were the same as those
used for the problem in <a href="#sec4">Section&nbsp;4</a>.
The solution yielded a figure in which both sets of end tendons
formed planar squares that were parallel to each other
just as the triangular ends of the skew three-prisms
of Sections <a href="#sec2">2</a> and <a href="#sec3">3</a>
were parallel to each other.
The relevant member data and coordinate values are summarized in the columns
labeled "(D)" of Tables <a href="#tab2l">3</a>,
<a href="#tab2s">4</a> and <a href="#tab2a">5</a>.
</p>

<p>
It is significant that again, in either end, the member stresses for
all four tendons were equal; also, the twist-angle formula was
again satisfied, and the length of strut 12(s) turned
out to be equal to the length of the adjacent strut 11(s).
Note that the end points for members
7(c), 8(c), 10(s) and 11(s) have changed.
</p>

<p id="sec5a"><big>
<b>6 Discussion</b>
</big></p>

<p>
The nonlinear programming method described
in <a href="#sec3">Section&nbsp;3</a> for designing skew prisms
has been tested in designing skew N-prisms for
N&nbsp;=&nbsp;5, 6 and 8
with qualitative results identical to those
described here for N&nbsp;=&nbsp;3 and 4.
In the tests, the end tendons were constrained to various lengths, not
necessarily equal to each other.  In the solutions, all the points
of a prism end always fell in the same plane, and this plane was always
parallel to the plane containing the points of the other end.
When all the tendon lengths of an end were equal to one length, and all the
tendon lengths of the other end were equal to the same or another length,
the tendons of both ends formed two regular polygons, and the twist-angle
formula from Kenner<a href="#Kenner76B">[5]</a> was satisfied.
In addition, in the case of equilateral ends, it
appears that all the stresses for the tendons at one end are equal.
</p>

<p>
It seems reasonable to conjecture that these properties will hold for
any N such that N&nbsp;&ge;&nbsp;3.
A design for a skew eight-prism is shown in <a href="#fig5">Figure&nbsp;5</a>.
The method also appears to work for prisms where side tendons skip
one or more struts instead of connecting adjacent struts.
(Two struts are adjacent if a single end tendon connects them.
Kenner always assumes side tendons connect adjacent struts
and never skip one or more struts.)
When three struts are constrained to have equal lengths, or three
side tendons are constrained to have equal lengths, and the ends
are equilateral, a regular prism is obtained as a solution.
</p>

<p>
These results imply a closed-form non-iterative approach,
similar to the one described for regular prisms in Kenner, will suffice
for the design of skew prisms for the cases where the ends are equilateral.
It also seems very possible that closed-form solutions could be developed
for skew and non-skew prisms with non-equilateral ends.
Nonlinear programming may be useful
in these situations for pointing out regularities which
lead to closed-form solutions.
By a careful choice of struts constrained and target values,
it appears possible to duplicate the symmetry of strut lengths found
in the skew four-prism designed in <a href="#sec4a">Section&nbsp;5</a>
for any even-order skew prism; that is, the number of different strut
lengths can be restricted to half the order of the prism.
</p>

<p>
Skew prisms can also be obtained by constraining less than three side member
lengths, but in these cases the solution will not be isolated.
In these cases, there
is a connected neighborhood of feasible point coordinates that yield the
same value for the objective function and therefore solve the problem.
The particular solution reached depends on the initial values and
the iteration path taken to reach the solution.  However, the problem
appears to be only one of determinacy, and not one of instability of the
structure corresponding to any given solution.
</p>

<p>
In the case of equilateral ends,
it appears the pattern of stress in the ends is not affected by the skewness.
This property, in conjunction with the skew-invariant twist angle,
allows interesting tensegrity designs to be obtained by taking
stacks of prisms such as have been used in mast
designs by David Emmerich
(see <a href="#Emmerich88B">[3]</a>, p.&nbsp;200)
and varying skew stage by stage.
An arch based on such a procedure is shown
in <a href="#fig6">Figure&nbsp;6</a>.  It was designed by
applying linear offsets to the ends of each stage and validated using
nonlinear programming.
</p>

<p>
This paper examined stability issues very little.  In general,
solutions to nonlinear programming problems seem to yield stable
structures.  As long as a solution to the nonlinear programming problem
is an isolated minimum,
not necessarily a global minimum, it would seem any realization
with highly inelastic members should be stable.  However, there
are probably pathological cases where a realization of a
not-very-isolated solution would fail when perturbed by external
forces.  Also, when tendons are more elastic, the tendons will be
able to stretch more and therefore more grossly violate the design
constraints.  This also could create a situation where a realization
of even a fairly isolated solution would fail when perturbed.
In these situations, a measure of the isolation of a solution
would be useful to determine how robust a realization would be
in the face of perturbing forces.
</p>

<p>
The main task remaining in exploring further the
simple nonlinear programming method for designing skew prisms
is to develop a mathematical proof
of its conjectured generality.  This would help understand it and
perhaps help widen its applicability to other situations.
The proof would probably also help describe the relationship
between the constraint target values chosen and the gross
measures of skewness:  the height of the prism and the direction
and amount of skew.  The simplicity of the nonlinear programming
problem involved may allow a symbolic solution using standard
calculus techniques.
</p>

<p>
It would also be useful to characterize the limits on the
target values for the constraints in more detail.
In <a href="#sec3">Section&nbsp;3</a>, one compatibility
condition for the constraints was mentioned, but there may
be others.  Target values that yield uninteresting flat prisms
also need to be avoided.
It might also be possible to pose the nonlinear programming
problem so that, instead of parallel planar ends being obtained,
planar ends at a prescribed angle to each other are obtained.
</p>

<p>
Another interesting topic for future research would be the relative
advantages and disadvantages in prototyping applications of numerical
techniques like the one explored here versus hands-on elastic-modeling
techniques like the one explored in <a href="#Popovic03B">[8]</a>
or using Tensegritoy.
Certainly this paper examined a situation where the numerical
technique has an advantage:  it is hard to imagine an
elastic-modeling technique being able to adjust the strut lengths
in enough detail to produce a skew prism.  However, there are
probably other design situations where the elastic-modeling
techniques have an advantage.
</p>

<p>
Applications for skew prisms have not been explored.  Their
configuration could make them useful in some situations where a
cantilevered structure is desirable.
</p>

<p id="sec5b"><big>
<b>7 Conclusions</b>
</big></p>

<p>
The nonlinear programming method is shown to be of utility
for both designing tensegrity structures and validating tensegrity
designs derived from other methodologies.  In addition, a
simple and general nonlinear programming method is described
in <a href="#sec3">Section&nbsp;3</a> for designing skew prisms.
Application of this method reveals the probable existence of
closed-form, non-iterative formulae for the design of skew prisms.
</p>

<p id="sec6"><big>
<b>8 Acknowledgements</b>
</big></p>

<p>
Comments by Bin-Bing Wang, Mark Schenk and reviewers for the
<span class="underline">Journal of the IASS</span> were much
appreciated and helped improve the presentation.  Remaining faults
are the responsibility of the author.
</p>

<p id="sec7"><big>
<b>9 References</b>
</big></p>

<table cellpadding="0" cellspacing="0">
<tr valign="top">
<td id="Bertsekas99B"><a href="#Bertsekas99A">[1]</a>&nbsp;&nbsp;</td>
<td>Bertsekas, Dimitri P.,
<span class="underline">Nonlinear Programming</span> (2nd edition),
Cambridge, Massachusetts:  Athena Scientific Press, 1999.</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Burkhardt05B"><a href="#Burkhardt05A">[2]</a></td>
<td>Burkhardt, Robert William, Jr.,
<a href="../tenseg/book/cover.html">
A Practical Guide to Tensegrity Design</a> (2nd edition),
Cambridge, Massachusetts:  Tensegrity Solutions, 2005.</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Emmerich88B"><a href="#Emmerich88A">[3]</a></td>
<td>Emmerich, David Georges,
<span class="underline">Structures Tendues et Autotendantes</span>,
Paris, France:  Ecole d'Architecture de Paris la Villette, 1988.</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Fuller73B"><a href="#Fuller73A">[4]</a></td>
<td>Fuller, R.&nbsp;Buckminster and Robert W. Marks,
<span class="underline">The Dymaxion World of Buckminster Fuller</span>,
Garden City, New York:  Anchor Books, 1973,
Figs.&nbsp;264-280, pp.&nbsp;165-169.
</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Kenner76B"><a href="#Kenner76A">[5]</a></td>
<td>Kenner, Hugh,
<span class="underline">Geodesic Math and How to Use It</span>,
Berkeley, California:  University of California Press, 1976.</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Lalvani96B"><a href="#Lalvani96A">[6]</a></td>
<td>Lalvani, Haresh, ed.,
"Origins of Tensegrity:  Views of Emmerich,
Fuller and Snelson",
<span class="underline">International Journal of Space Structures</span>,
Vol.&nbsp;11 (1996), Nos.&nbsp;1 &amp; 2, pp.&nbsp;44-47.
</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Motro94B"><a href="#Motro94A">[7]</a></td>
<td>Motro, Ren&eacute;, Sihem Belkacem and Nicolas Vassart,
"Form Finding Numerical Methods for Tensegrity Systems", pp.&nbsp;704-13
in John F. Abel, John W. Leonard, and Celina U. Penalba eds.,
<span class="underline">Spatial, lattice and tension structures</span>,
proceedings of the IASS-ASCE International Symposium 1994
held in conjunction with the ASCE Structures Congress XII,
April 24-29, 1994, Georgia World Congress, Atlanta, Georgia, USA.
</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Popovic03B"><a href="#Popovic03A">[8]</a></td>
<td>Popovic, Olga and Konstantinos Sakantamis,
"A Novel Approach to Physical Modeling --
Formfinding of Tensegrity Systems",
<span class="underline">Journal of the International Association for Shell
and Spatial Structures</span>, Vol.&nbsp;44 (2003), pp.&nbsp;15-24.
</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Tibert03B"><a href="#Tibert03A">[9]</a></td>
<td>Tibert, A.G. and S. Pellegrino, "Review of Form-Finding Methods for
Tensegrity Structures",
<span class="underline">International Journal of Space Structures</span>,
vol.&nbsp;18 (2003), No.&nbsp;4, pp.&nbsp;209-223.</td></tr>

<tr><td>&nbsp;</td></tr>

<tr valign="top"><td id="Tobie67B"><a href="#Tobie67A">[10]</a></td>
<td>Tobie, Roger S.,
<span class="underline">A Report on an Inquiry into the Existence, Formation
and Representation of Tensile Structures</span>, Master's thesis,
Department of Industrial Design, Pratt Institute, June 1967.</td></tr>

</table>

<p id="sec8"><big>
<b>10 Figures and Tables</b>
</big></p>

<table class="center" id="fig1"><tr align="center"><td>
<!-- Ref:  sk3prsm4.pov -->
<img src="sk3prsm.jpg" width="500" height="400"
     alt="line drawing of skew three-prism"/><br/>
Figure 1:  Skew Three-Prism
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="fig2"><tr align="center"><td>
<img src="motro94.jpg" alt="line drawing of four-prism"/><br/>
Figure 2:  Skew Four-Prismatic System Figure from Motro&nbsp;<i>et&nbsp;al.</i>
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="fig3"><tr><td align="center">
<img src="sk4prsm1.jpg" width="600" height="350"
     alt="line drawing of four-prism"/>
<!-- Ref:  sk4prsm2.pov --><br/>
Figure 3:  Reduced-Symmetry Four-Prism
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="fig4"><tr align="center"><td>
<!-- Ref:  sk4prsm3.pov -->
<img src="sk4prsm2.jpg" width="500" height="350"
     alt="line drawing of skew four-prism"/><br/>
Figure 4:  Skew Four-Prism
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="fig5"><tr align="center"><td>
<!-- Ref:  sk8prsm1.pov
           (additional labels and tendon touchup inserted manually) -->
<img src="sk8prsmspec.jpg" alt="line drawing of skew eight-prism"/><br/>
Figure 5:  Skew Eight-Prism
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="fig6"><tr align="center"><td>
<!-- Ref:  x3l6mast2b2.pov (tendon touchup inserted manually) -->
<img src="arch.jpg" width="600" height="325"
     alt="line drawing of six-stage skew-prism arch"/><br/>
Figure 6:  Skew Prism Arch
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="tab1"><tr><td align="center">
<table rules="groups" border="1" class="center">
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup></colgroup>
<colgroup span="3"></colgroup>
<colgroup span="3"></colgroup>
<thead>
<tr>
<th></th><th>End</th>
<th>Force</th>
<th colspan="3">Length</th>
<th colspan="3">Stress</th>
</tr>
<tr valign="bottom">
<th>Member</th><th>points</th>
<th>density</th>
<th>(M)</th><th>(V)</th><th>(D)</th>
<th>(M)</th><th>(V)</th><th>(D)</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">1(c)</td>
<td align="center">1&nbsp;-&nbsp;2</td>
<td align="center">&nbsp;&nbsp;1.000</td>
<td align="center">&nbsp;1.000&nbsp;</td>
<td align="center">&nbsp;1.000&nbsp;</td>
<td align="center">&nbsp;1.000&nbsp;</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;0.577 t</td>
</tr>

<tr>
<td align="center">2(c)</td>
<td align="center">2&nbsp;-&nbsp;3</td>
<td align="center">&nbsp;&nbsp;1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;0.998 t</td>
<td align="center">&nbsp;&nbsp;0.577 t</td>
</tr>

<tr>
<td align="center">3(c)</td>
<td align="center">3&nbsp;-&nbsp;1</td>
<td align="center">&nbsp;&nbsp;1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;1.001 t</td>
<td align="center">&nbsp;&nbsp;0.577 t</td>
</tr>
</tbody>
<tbody>
<tr>
<td align="center">4(c)</td>
<td align="center">3&nbsp;-&nbsp;5</td>
<td align="center">&nbsp;&nbsp;1.732</td>
<td align="center">1.302</td>
<td align="center">1.303</td>
<td align="center">1.300</td>
<td align="center">&nbsp;&nbsp;2.255 t</td>
<td align="center">&nbsp;&nbsp;2.249 t</td>
<td align="center">&nbsp;&nbsp;1.300 t</td>
</tr>

<tr>
<td align="center">5(c)</td>
<td align="center">1&nbsp;-&nbsp;6</td>
<td align="center">&nbsp;&nbsp;1.732</td>
<td align="center">1.641</td>
<td align="center">1.641</td>
<td align="center">1.579</td>
<td align="center">&nbsp;&nbsp;2.843 t</td>
<td align="center">&nbsp;&nbsp;2.845 t</td>
<td align="center">&nbsp;&nbsp;1.579 t</td>
</tr>

<tr>
<td align="center">6(c)</td>
<td align="center">2&nbsp;-&nbsp;4</td>
<td align="center">&nbsp;&nbsp;1.732</td>
<td align="center">1.360</td>
<td align="center">1.360</td>
<td align="center">1.272</td>
<td align="center">&nbsp;&nbsp;2.356 t</td>
<td align="center">&nbsp;&nbsp;2.354 t</td>
<td align="center">&nbsp;&nbsp;1.272 t</td>
</tr>
</tbody>
<tbody>

<tr>
<td align="center">7(s)</td>
<td align="center">3&nbsp;-&nbsp;6</td>
<td align="center">-1.732</td>
<td align="center">2.024</td>
<td align="center">2.024</td>
<td align="center">2.066</td>
<td align="center">-3.505 t</td>
<td align="center">-3.501 t</td>
<td align="center">-2.066 t</td>
</tr>

<tr>
<td align="center">8(s)</td>
<td align="center">1&nbsp;-&nbsp;4</td>
<td align="center">-1.732</td>
<td align="center">2.161</td>
<td align="center">2.161</td>
<td align="center">2.000</td>
<td align="center">-3.743 t</td>
<td align="center">-3.741 t</td>
<td align="center">-2.000 t</td>
</tr>

<tr>
<td align="center">9(s)</td>
<td align="center">2&nbsp;-&nbsp;5</td>
<td align="center">-1.732</td>
<td align="center">0.969</td>
<td align="center">0.969</td>
<td align="center">1.000</td>
<td align="center">-1.679 t</td>
<td align="center">-1.676 t</td>
<td align="center">-1.000 t</td>
</tr>
</tbody>
<tbody>

<tr>
<td align="center">10(c)</td>
<td align="center">4&nbsp;-&nbsp;5</td>
<td align="center">?</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;1.001 t</td>
<td align="center">&nbsp;&nbsp;0.577 t</td>
</tr>

<tr>
<td align="center">11(c)</td>
<td align="center">5&nbsp;-&nbsp;6</td>
<td align="center">?</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;0.998 t</td>
<td align="center">&nbsp;&nbsp;0.577 t</td>
</tr>

<tr>
<td align="center">12(c)</td>
<td align="center">6&nbsp;-&nbsp;4</td>
<td align="center">?</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">1.000</td>
<td align="center">&nbsp;&nbsp;1.000 t</td>
<td align="center">&nbsp;&nbsp;0.995 t</td>
<td align="center">&nbsp;&nbsp;0.577 t</td>
</tr>
</tbody>

</table>

</td></tr><tr><td align="center">
Table&nbsp;1:  Skew Three-Prism:  Member Data
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="tab1a"><tr><td align="center">
<table rules="groups" border="1" class="center">
<colgroup></colgroup>
<colgroup span="3"></colgroup>
<colgroup span="3"></colgroup>
<colgroup span="3"></colgroup>
<thead>
<tr>
<th>End</th>
<th colspan="3">Initial</th>
<th colspan="3">(V)</th>
<th colspan="3">(D)</th>
</tr>
<tr>
<th>point</th>
<th>x</th><th>y</th><th>z</th>
<th>x</th><th>y</th><th>z</th>
<th>x</th><th>y</th><th>z</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">1</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><msqrt><mn>3</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">1</td>
<td align="center">&nbsp;&nbsp;0.379</td>
<td align="center">&nbsp;&nbsp;1.321</td>
<td align="center">&nbsp;&nbsp;0.953</td>
<td align="center">&nbsp;&nbsp;0.191</td>
<td align="center">&nbsp;&nbsp;1.175</td>
<td align="center">&nbsp;&nbsp;0.981</td>
</tr>

<tr>
<td align="center">2</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn>
<mrow><mn>2</mn><mo>&InvisibleTimes;</mo><msqrt><mn>3</mn></msqrt></mrow>
</mfrac>
</math></td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn><mn>2</mn></mfrac>
</math></td>
<td align="center">1</td>
<td align="center">-0.122</td>
<td align="center">&nbsp;&nbsp;0.455</td>
<td align="center">&nbsp;&nbsp;0.954</td>
<td align="center">-0.309</td>
<td align="center">&nbsp;&nbsp;0.309</td>
<td align="center">&nbsp;&nbsp;0.981</td>
</tr>

<tr>
<td align="center">3</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn>
<mrow><mn>2</mn><mo>&InvisibleTimes;</mo><msqrt><mn>3</mn></msqrt></mrow>
</mfrac>
</math></td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><mn>2</mn></mfrac>
</math></td>
<td align="center">1</td>
<td align="center">-0.621</td>
<td align="center">&nbsp;&nbsp;1.322</td>
<td align="center">&nbsp;&nbsp;0.955</td>
<td align="center">-0.809</td>
<td align="center">&nbsp;&nbsp;1.175</td>
<td align="center">&nbsp;&nbsp;0.981</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">4</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn>
<mrow><mn>2</mn><mo>&InvisibleTimes;</mo><msqrt><mn>3</mn></msqrt></mrow>
</mfrac>
</math></td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn><mn>2</mn></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">-0.289</td>
<td align="center">-0.500</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">-0.289</td>
<td align="center">-0.500</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>

<tr>
<td align="center">5</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn>
<mrow><mn>2</mn><mo>&InvisibleTimes;</mo><msqrt><mn>3</mn></msqrt></mrow>
</mfrac>
</math></td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><mn>2</mn></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">-0.289</td>
<td align="center">&nbsp;&nbsp;0.500</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">-0.289</td>
<td align="center">&nbsp;&nbsp;0.500</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>

<tr>
<td align="center">6</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><msqrt><mn>3</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">&nbsp;&nbsp;0.577</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.577</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>
</tbody>

</table>

</td></tr><tr><td align="center">
Table&nbsp;2:  Skew Three-Prism:  Coordinate Values
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="tab2l"><tr><td align="center">
<table rules="groups" border="1" class="center">
<colgroup></colgroup>
<colgroup span="2"></colgroup>
<colgroup span="3"></colgroup>
<thead>
<tr>
<th></th><th colspan="2">End points</th><th colspan="3">Length</th></tr>
<tr><th>Member</th><th>(M+V)</th><th>(D)</th>
<th>(M)</th><th>(V)</th><th>(D)</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">1(c)</td>
<td align="center">1&nbsp;-&nbsp;2</td>
<td align="center">1&nbsp;-&nbsp;2</td>
<td align="center">&nbsp;0.901&nbsp;</td>
<td align="center">&nbsp;0.901&nbsp;</td>
<td align="center">&nbsp;0.901&nbsp;</td>
</tr>

<tr>
<td align="center">2(c)</td>
<td align="center">2&nbsp;-&nbsp;3</td>
<td align="center">2&nbsp;-&nbsp;3</td>
<td align="center">0.901</td>
<td align="center">0.901</td>
<td align="center">0.901</td>
</tr>

<tr>
<td align="center">3(c)</td>
<td align="center">3&nbsp;-&nbsp;4</td>
<td align="center">3&nbsp;-&nbsp;4</td>
<td align="center">0.901</td>
<td align="center">0.901</td>
<td align="center">0.901</td>
</tr>

<tr>
<td align="center">4(c)</td>
<td align="center">4&nbsp;-&nbsp;1</td>
<td align="center">4&nbsp;-&nbsp;1</td>
<td align="center">0.901</td>
<td align="center">0.901</td>
<td align="center">0.901</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">5(c)</td>
<td align="center">2&nbsp;-&nbsp;6</td>
<td align="center">2&nbsp;-&nbsp;6</td>
<td align="center">1.118</td>
<td align="center">1.118</td>
<td align="center">1.700</td>
</tr>

<tr>
<td align="center">6(c)</td>
<td align="center">1&nbsp;-&nbsp;5</td>
<td align="center">1&nbsp;-&nbsp;5</td>
<td align="center">1.718</td>
<td align="center">1.718</td>
<td align="center">2.053</td>
</tr>

<tr>
<td align="center">7(c)</td>
<td align="center">4&nbsp;-&nbsp;8</td>
<td align="center">3&nbsp;-&nbsp;7</td>
<td align="center">1.118</td>
<td align="center">1.118</td>
<td align="center">1.348</td>
</tr>

<tr>
<td align="center">8(c)</td>
<td align="center">3&nbsp;-&nbsp;7</td>
<td align="center">4&nbsp;-&nbsp;8</td>
<td align="center">1.718</td>
<td align="center">1.718</td>
<td align="center">1.772</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">9(s)</td>
<td align="center">2&nbsp;-&nbsp;5</td>
<td align="center">2&nbsp;-&nbsp;5</td>
<td align="center">2.516</td>
<td align="center">2.516</td>
<td align="center">2.516</td>
</tr>

<tr>
<td align="center">10(s)</td>
<td align="center">1&nbsp;-&nbsp;8</td>
<td align="center">4&nbsp;-&nbsp;7</td>
<td align="center">1.500</td>
<td align="center">1.500</td>
<td align="center">1.500</td>
</tr>

<tr>
<td align="center">11(s)</td>
<td align="center">4&nbsp;-&nbsp;7</td>
<td align="center">1&nbsp;-&nbsp;8</td>
<td align="center">2.516</td>
<td align="center">2.516</td>
<td align="center">2.516</td>
</tr>

<tr>
<td align="center">12(s)</td>
<td align="center">3&nbsp;-&nbsp;6</td>
<td align="center">3&nbsp;-&nbsp;6</td>
<td align="center">1.500</td>
<td align="center">1.500</td>
<td align="center">1.500</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">13(c)</td>
<td align="center">5&nbsp;-&nbsp;6</td>
<td align="center">5&nbsp;-&nbsp;6</td>
<td align="center">?</td>
<td align="center">1.824</td>
<td align="center">1.000</td>
</tr>

<tr>
<td align="center">14(c)</td>
<td align="center">6&nbsp;-&nbsp;7</td>
<td align="center">6&nbsp;-&nbsp;7</td>
<td align="center">?</td>
<td align="center">1.824</td>
<td align="center">1.000</td>
</tr>

<tr>
<td align="center">15(c)</td>
<td align="center">7&nbsp;-&nbsp;8</td>
<td align="center">7&nbsp;-&nbsp;8</td>
<td align="center">?</td>
<td align="center">1.824</td>
<td align="center">1.000</td>
</tr>

<tr>
<td align="center">16(c)</td>
<td align="center">8&nbsp;-&nbsp;5</td>
<td align="center">8&nbsp;-&nbsp;5</td>
<td align="center">?</td>
<td align="center">1.824</td>
<td align="center">1.000</td>
</tr>
</tbody>

</table>

</td></tr><tr><td align="center">
Table&nbsp;3:  Four-Prism:  Member End-Point and Length Data
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="tab2s"><tr><td align="center">
<table rules="groups" border="1" class="center">
<colgroup></colgroup>
<colgroup span="3"></colgroup>
<colgroup span="2"></colgroup>
<colgroup></colgroup>
<thead>
<tr>
<th></th><th colspan="3">Stress</th><th colspan="2">Normalized&nbsp;Stress</th>
<th>Percent</th></tr>
<tr><th>Member</th><th>(M)</th><th>(V)</th><th>(D)</th>
<th>(M)</th><th>(V)</th><th>Difference</th>
</tr>
</thead>

<tbody>

<tr>
<td align="center">1(c)</td>
<td align="center">&nbsp;&nbsp;0.901&nbsp;t</td>
<td align="center">&nbsp;&nbsp;5.416&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.707&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.0418&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0844&nbsp;</td>
<td align="center">102</td>
</tr>

<tr>
<td align="center">2(c)</td>
<td align="center">&nbsp;&nbsp;0.901&nbsp;t</td>
<td align="center">&nbsp;&nbsp;2.985&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.707&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.0418&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0465&nbsp;</td>
<td align="center">&nbsp;&nbsp;11</td>
</tr>

<tr>
<td align="center">3(c)</td>
<td align="center">&nbsp;&nbsp;0.901&nbsp;t</td>
<td align="center">&nbsp;&nbsp;5.416&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.707&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.0418&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0844&nbsp;</td>
<td align="center">102</td>
</tr>

<tr>
<td align="center">4(c)</td>
<td align="center">&nbsp;&nbsp;0.901&nbsp;t</td>
<td align="center">&nbsp;&nbsp;2.985&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.707&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.0418&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0465&nbsp;</td>
<td align="center">&nbsp;&nbsp;11</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">5(c)</td>
<td align="center">&nbsp;&nbsp;1.118&nbsp;t</td>
<td align="center">&nbsp;&nbsp;4.150 t</td>
<td align="center">&nbsp;&nbsp;1.700&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.0519&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0647&nbsp;</td>
<td align="center">&nbsp;&nbsp;25</td>
</tr>

<tr>
<td align="center">6(c)</td>
<td align="center">&nbsp;&nbsp;2.577&nbsp;t</td>
<td align="center">&nbsp;&nbsp;5.699 t</td>
<td align="center">&nbsp;&nbsp;2.053&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.120&nbsp;&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0889&nbsp;</td>
<td align="center">&nbsp;&nbsp;35</td>
</tr>

<tr>
<td align="center">7(c)</td>
<td align="center">&nbsp;&nbsp;1.118&nbsp;t</td>
<td align="center">&nbsp;&nbsp;4.150 t</td>
<td align="center">&nbsp;&nbsp;1.348&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.0519&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0647&nbsp;</td>
<td align="center">&nbsp;&nbsp;25</td>
</tr>

<tr>
<td align="center">8(c)</td>
<td align="center">&nbsp;&nbsp;2.577&nbsp;t</td>
<td align="center">&nbsp;&nbsp;5.699 t</td>
<td align="center">&nbsp;&nbsp;1.772&nbsp;t</td>
<td align="center">&nbsp;&nbsp;0.120&nbsp;&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;0.0889&nbsp;</td>
<td align="center">&nbsp;&nbsp;35</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">9(s)</td>
<td align="center">-3.774&nbsp;t</td>
<td align="center">-9.427 t</td>
<td align="center">-2.516&nbsp;t</td>
<td align="center">-0.175&nbsp;&nbsp;&nbsp;</td>
<td align="center">-0.147&nbsp;&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;19</td>
</tr>

<tr>
<td align="center">10(s)</td>
<td align="center">-1.500&nbsp;t</td>
<td align="center">-4.392 t</td>
<td align="center">-1.500&nbsp;t</td>
<td align="center">-0.0696&nbsp;</td>
<td align="center">-0.0685&nbsp;</td>
<td align="center">&nbsp;&nbsp;&nbsp;&nbsp;2</td>
</tr>

<tr>
<td align="center">11(s)</td>
<td align="center">-3.774&nbsp;t</td>
<td align="center">-9.427 t</td>
<td align="center">-2.516&nbsp;t</td>
<td align="center">-0.175&nbsp;&nbsp;&nbsp;</td>
<td align="center">-0.147&nbsp;&nbsp;&nbsp;</td>
<td align="center">&nbsp;&nbsp;19</td>
</tr>

<tr>
<td align="center">12(s)</td>
<td align="center">-1.500&nbsp;t</td>
<td align="center">-4.392 t</td>
<td align="center">-1.500&nbsp;t</td>
<td align="center">-0.0696&nbsp;</td>
<td align="center">-0.0685&nbsp;</td>
<td align="center">&nbsp;&nbsp;&nbsp;&nbsp;2</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">13(c)</td>
<td align="center">?</td>
<td align="center">&nbsp;&nbsp;2.731 t</td>
<td align="center">&nbsp;&nbsp;0.637 t</td>
<td align="center">--</td>
<td align="center">--</td>
<td align="center">--</td>
</tr>

<tr>
<td align="center">14(c)</td>
<td align="center">?</td>
<td align="center">&nbsp;&nbsp;1.824 t</td>
<td align="center">&nbsp;&nbsp;0.637 t</td>
<td align="center">--</td>
<td align="center">--</td>
<td align="center">--</td>
</tr>

<tr>
<td align="center">15(c)</td>
<td align="center">?</td>
<td align="center">&nbsp;&nbsp;2.731 t</td>
<td align="center">&nbsp;&nbsp;0.637 t</td>
<td align="center">--</td>
<td align="center">--</td>
<td align="center">--</td>
</tr>

<tr>
<td align="center">16(c)</td>
<td align="center">?</td>
<td align="center">&nbsp;&nbsp;1.824 t</td>
<td align="center">&nbsp;&nbsp;0.637 t</td>
<td align="center">--</td>
<td align="center">--</td>
<td align="center">--</td>
</tr>
</tbody>

</table>

</td></tr><tr><td align="center">
Table&nbsp;4:  Four-Prism:  Member Stress Data
</td></tr></table>

<div class="spacer"><br/><br/></div>

<table class="center" id="tab2a"><tr><td align="center">
<table rules="groups" border="1" class="center">
<colgroup></colgroup>
<colgroup span="3"></colgroup>
<colgroup span="3"></colgroup>
<colgroup span="3"></colgroup>
<thead>
<tr>
<th>End</th>
<th colspan="3">Initial</th>
<th colspan="3">(V)</th>
<th colspan="3">(D)</th>
</tr>
<tr>
<th>point</th>
<th>x</th><th>y</th><th>z</th>
<th>x</th><th>y</th><th>z</th>
<th>x</th><th>y</th><th>z</th>
</tr>
</thead>

<tbody>
<tr>
<td align="center">1</td>
<td align="center">0</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">1.5</td>
<td align="center">-0.396</td>
<td align="center">-0.374</td>
<td align="center">&nbsp;&nbsp;0.688</td>
<td align="center">-1.514</td>
<td align="center">&nbsp;&nbsp;0.017</td>
<td align="center">&nbsp;&nbsp;1.183</td>
</tr>

<tr>
<td align="center">2</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">1.5</td>
<td align="center">-0.468</td>
<td align="center">&nbsp;&nbsp;0.496</td>
<td align="center">&nbsp;&nbsp;0.912</td>
<td align="center">-1.514</td>
<td align="center">&nbsp;&nbsp;0.918</td>
<td align="center">&nbsp;&nbsp;1.183</td>
</tr>

<tr>
<td align="center">3</td>
<td align="center">0</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">1.5</td>
<td align="center">&nbsp;&nbsp;0.396</td>
<td align="center">&nbsp;&nbsp;0.374</td>
<td align="center">&nbsp;&nbsp;0.688</td>
<td align="center">-0.613</td>
<td align="center">&nbsp;&nbsp;0.918</td>
<td align="center">&nbsp;&nbsp;1.183</td>
</tr>

<tr>
<td align="center">4</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">1.5</td>
<td align="center">&nbsp;&nbsp;0.468</td>
<td align="center">-0.496</td>
<td align="center">&nbsp;&nbsp;0.912</td>
<td align="center">-0.613</td>
<td align="center">&nbsp;&nbsp;0.017</td>
<td align="center">&nbsp;&nbsp;1.183</td>
</tr>
</tbody>

<tbody>
<tr>
<td align="center">5</td>
<td align="center">0</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">-1.498</td>
<td align="center">-0.549</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">-0.707</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>

<tr>
<td align="center">6</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>-1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">-0.883</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">-0.707</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>

<tr>
<td align="center">7</td>
<td align="center">0</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;1.498</td>
<td align="center">-0.549</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.707</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>

<tr>
<td align="center">8</td>
<td align="center"><math xmlns="&mathml;">
<mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac>
</math></td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">&nbsp;&nbsp;0.883</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.707</td>
<td align="center">&nbsp;&nbsp;0.000</td>
<td align="center">&nbsp;&nbsp;0.000</td>
</tr>
</tbody>

</table>

</td></tr><tr><td align="center">
Table&nbsp;5:  Four-Prism:  Coordinate Values
</td></tr></table>

</body>
</html>
