## Curve Evolution – Example 8.4

This script uses a fairly straightforward recursive process known as “curve evolution” to create descending contour lines. The results can get quite interesting depending on the starting pattern.

The concept of curve evolution is fairly straightforward. You take a curve, employ some operation to slightly modify the existing curve to create a new curve. After each “generation” quirks or abnormalities in one generation can be propagated to the next. In this example, this will be accomplished by dividing a curve into fixed intervals using the “Divide Length” component. The division points are then offset or moved perpendicular to the original curve within a Random Domain. The offset points are then used to construct a new curve. Rinse. Repeat.

You can see that a many of the “bumps” in the first generation are propagated to the second, sometimes being amplified. This process continues for as many generations as you want, although sometimes if the domain is too large you will get the curve looping back on itself, which is not the goal in mind. So it does require a conscious user to determine if the starting curves and the domain parameters are acceptable or not.

Another thing I decided to do was to use my curves to create a descending set of contour lines. So after each generation, the curves are moved down by a “Z” factor (which can be adjusted). Finally, when curves from several offsets start to overlap, I do a “Boolean Union” on the curves to create clean contour lines.

You can see the results of this below with several starting iterations, from squares, to circles, to elongated ellipses to stars.

Note that this script really only works if you are offsetting outwards, and with closed curves. If your lines are offsetting inwards, an easy fix is to simply select the geometry in Rhino, and to type “Flip”.

If you want to offset inwards, you will have to take into account the topology of your shapes. Refer to example 4.7 to see how this is done.

Various Curve evolutions in Plan and isometric views.

Anyways, it should be fairly simple to recreate but if you need some help, an image of the script is shown below.

Also, the domain of the minimum and maximum offset needs to be optimized based on the overall scale of your geometry. If you have small pieces of initial geometry drawn in Rhino, and then large values for the minimum and maximum offset, you will get some crazy spaghetti!

In the end I just wanted to show a picture from a Sand Artist, Andres Amador. Many of his patterns use principles of complexity and emergence for very temporary landscape installations (you can even commission him to create your own pattern!). This particular piece is a curve evolve, where initial irregularities caused by the rocks in the cove are propagated out through the pattern, where each successive curve generation builds on, but slightly changes from the previous.