Tips 5: Forcing Symmetric Angles

One of the uses for conditions in TreeMaker is to force active paths to lie at specific angles. Why would you want to do this?

Once you have computed and folded a number ofTreeMaker designs, you'll discover that while all the axial edges are aligned (that's the nature of a uniaxial base), only rarely will the ridges of each flap line up with each other. That's because a flap is composed of a bunch of triangles coming together and whenTreeMaker optimizes a base, there's no particular reason for it to make the angles of one triangle equal to those of the adjacent layers. This has the effect of making the crease pattern rather irregular, which then makes it difficult to fold without measuring the locations of points, lines, and their associated angles.

However, if you could force all angles to be the same, or one of a small set of similar angles, then you'd get a base in which more layers tend to line up. Angle-forcing conditions allow you to do exactly this. If all the major creases run along fairly standard angles, you run a better chance of being able to construct reference points by folding and/or a sequential folding sequence, rather than measuring for reference points and a folding sequence that consists of a single "bring all these creases together at once."

If we are to force major creases to lie at "standard" angles, which angles should we choose? A natural set of angles are those that are obtained by dividing a circle into an integral number of equal divisions: for example, the common 22.5° angle found in the Bird Base is obtained by dividing a circle into 16 parts. While this is the most common division, several others provide useful and interesting bases: division into 12 parts gives multiples of 30° and crease patterns with many equilateral triangles in them.

Let's work through an example. Create a new document and construct the six-legged tree as shown in Figure Ti-5-1.


Figure Ti-5-1.

Now, select Action->Scale Everything to create the first iteration of the design.


Figure Ti-5-2.

Choose Action->Build Crease Pattern and View->Creases View to get the crease pattern shown in Figure Ti-5-3.


Figure Ti-5-3.

The creases in this design don't precisely fall on standard angles. We'll modify it so that they do. We do this by putting a "Path angle quantized" condition on all of the paths that correspond to major creases.

Put the model back into Design view (View->Design View) and kill the crease pattern (Action->Kill Crease Pattern) to put in back into the configuration shown in Figure Ti-5-2. Once again, only the polygon paths are shown.

Now we'll pick the paths to be angle-quantized. What we're really after is quantizing the angle of the creases associated with certain paths. Since paths only have creases if they are active paths, only the currently-active paths --- the green lines in the figure --- should be quantized. Select all of the active paths by clicking on the first, then shift-clicking on each path, until all six active paths are selected as shown in Figure Ti-5-4.


Figure Ti-5-4.

Then select Condition->Path Angle Quantized. This puts up the dialog shown in Figure Ti-5-5.


Figure Ti-5-5.

Path angle quantization forces the crease associated with the path to lie at some angle of the form

with respect to the x axis, where N is an integer and offset is some fixed angle. In order to insure that the path does have a crease associated with it, the path is also forced to be active. In fact, the quantization condition is actually just an additional condition placed on an ordinary path active condition.

The quantization value N can be any positive integer, but the most common values are N=4, which is common in box-pleated patterns (axial creases at multiples of 90°, ridge creases at odd multiples of 45°); N=6, which gives hexagonal symmetry; and N=8, which corresponds to the angles you find in a Bird Base. But you might try others for fun; there are many other useful possibilities to be found in the other angles, and I have found interesting structures for N=10 as well. We'll work with N=8 for now. Type in 8 for the quantization and 0 for the offset and click OK.

As shown in Figure Ti-5-6, each of the paths now has a condition attached to it, which will force the condition to be active and quantized.


Figure Ti-5-6.

In principle, you should be able to re-optimize directly; however, due to a quirk in this condition (which is the most mathematically complex condition), TreeMaker has a tendency to settle onto a spurious solution in which the entire crease pattern has shrunk into oblivion. (Try it and see. You can always Edit->Undo.) To prevent this tendency, we'll need to stitch some of the nodes to the edges of the square with additional conditions to keep the node pattern (and corresponding crease pattern) stretched out.

Select nodes 5 and 6 and choose Condition->Node(s) Fixed to Paper Edge. Then select nodes 7 and 8 and choose Condition->Node(s) Fixed to Corner. This will force these nodes to the edges of the paper, but will allow nodes 5 and 6 them to "slide around" on the edges during optimization to accommodate the angle constraints.

Now, time to optimize. Select Action->Scale Everything. You will see the dialog shown in Figure Ti-5-7.


Figure Ti-5-7.

The fact that the number of equations exceeds the number of degrees of freedom means that we are highly unlikely to find a solution simply by varying the scale. Click "No" to dismiss the dialog. We are going to have to perform a strain optimization --- allowing the strains of the individual edges to vary in order to satisfy all of the path angle constraints. This is typically the case once you start adding path conditions: strain optimization is the only way to satisfy all of the path conditions.

Select all of the nodes and edges (Edit->Select->All) and choose Action->Minimize Strain. You should end up with the pattern shown in Figure Ti-5-8.


Figure Ti-5-8.

This is very close to the original pattern, but all the paths now run at multiples of 22.5°. If you now build the crease pattern (Action->Build Crease Pattern), you will see that all the creases also run at multiples of 11.25°. This would be a very easy pattern to construct purely by folding.


Figure Ti-5-9.

If you know the angle you want the crease to run along, you can also fix the angle to a specific value using Condition->Path Angle Fixed.... Since path angle quantization and path angle fixation both involve forcing the path to be active, they are all variants of the same basic Path Angle Fixed condition. Once you have placed one type of condition, you can turn it into either of the other two by selecting the appropriate radio button in the Inspector, as shown in Figure Ti-5-10.


Figure Ti-5-10.

You'll note that we didn't place a condition on the path between nodes 7 and 8. That's because it wasn't active, and placing an angle quantized condition would have necessarily forced it to be active. That might not be a problem, but forcing too many paths to be active can cause problems with convergence if you've set up a set of mutually inconsistent conditions. If, during the optimization, the pattern starts jumping about wildly, it's likely that you have set up inconsistent conditions, and the best thing to do is halt the optimization and remove one or two conditions until the optimization settles down.

I mentioned that the N=4 angle quantization condition makes the axial creases run at multiples of 90°, which makes the ridge angles at the corners of polygons run at odd multiples of 45°. This is a characteristic of box-pleated patterns, and it is tempting to think that this might be a way to construct box-pleated crease patterns with TreeMaker. Alas, you'll find that even if you force the axial paths to run at multiples of 90°, in general, creases constructed by the universal molecule inside each polygon will not, in general, stick to these angles. The creation of box-pleated patterns (and their analogs with other symmetries) in which all creases run at multiples of some fixed angle require a different set of algorithms: a set that will have to wait, perhaps, until TreeMaker 6.

Previous: Tips 4: Fracturing Polygons