Jump to content

Sierpiński triangle

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by RogerBarnett (talk | contribs) at 15:11, 28 July 2006 (Added cellular automaton reference). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Sierpinski triangle

The Sierpinski triangle, also called the Sierpinski gasket, is a fractal, named after Wacław Sierpiński who described it in 1915.

Construction

An algorithm for obtaining arbitrarily close approximations to the Sierpinski triangle is as follows:

The evolution of the Sierpinski triangle

  1. Start with any triangle in a plane. The canonical Sierpinski triangle uses an equilateral triangle with a base parallel to the horizontal axis (first image).
  2. Shrink the triangle by 1/2, make two copies, and position the three shrunken triangles so that each triangle touches the two other triangles at a corner (image 2).
  3. Repeat step 2 with each of the smaller triangles (image 3 and so on).

Note that this infinite process is not dependent upon the starting shape being a triangle - it is just clearer that way. The first few steps starting, for example, from a square also tend towards a Sierpinski gasket. Michael Barnsley used an image of a fish to illustrate this in his paper V-variable fractals and superfractals (PDF).

Iterating from a square

The actual fractal is what would be obtained after an infinite number of iterations. More formally, one describes it in terms of functions on closed sets of points. If we let note the dilation by a factor of 1/2 about a point a, then the Sierpinski triangle with corners a, b, and c is the fixed set of the transformation U U .

This is an attractive fixed set, so that when the operation is applied to any other set repeatedly, the images converge on the Sierpinski triangle. This is what is happening with the triangle above, but any other set would suffice.

If one takes a point and applies each of the transformations , , and to it randomly, the resulting points will be dense in the Sierpinski triangle, so the following algorithm will again generate arbitrarily close approximations to it:

Start by labelling p1, p2 and p3 as the corners of the Sierpinski triangle, and a random point v1. Set vn+1 = ½ ( vn + prn ), where rn is a random number 1, 2 or 3. Draw the points v1 to v. If the first point v1 was a point on the Sierpinski triangle, then all the points vn lie on the Sierpinski triangle. If the first point v1 to lie within the perimeter of the triangle is not a point on the Sierpinski triangle, none of the points vn will lie on the Sierpinski triangle, however they will converge on the triangle. If v1 is outside the triangle, the only way vn will land on the actual triangle, is if vn is on what would be part of the triangle, if the triangle was infinitely large.

Or simpler:

  1. Take 3 points in a plane, start at one of the points.
  2. Randomly select any point and move half the distance from that point to any of the 3 vertex points. Plot the current position.
  3. Repeat from step 2.

Or using an Iterated function system

An alternative way of computing the Sierpinski triangle uses an Iterated function system and starts by a point in the origin (x0=0, y0=0) and then the new points are iteratively computed by randomly applying (with equal probability) one of the following 3 coordinate transformations (using the so called chaos game):

Sierpinski triangle using IFS

xn+1=0.5 xn
yn+1=0,5 yn  ; a half-size copy
when this coordinate transformation is used, the point is drawn in yellow in the figure

xn+1=0.5 xn+0,5
yn+1=0,5 yn+0,5 ; a half-size copy shifted right and up
when this coordinate transformation is used, the point is drawn in red

xn+1=0.5 xn+1
yn+1=0,5 yn  ; a half-size copy doubled shifted to the right
when this coordinate transformation is used, the point is drawn in blue

Or using an L-system — The Sierpinski triangle drawn using an L-system.

Other means — The Sierpinski triangle also appears in certain cellular automata, including those relating to Conway's Game of Life. The automaton "12/1" when applied to a single cell will generate four approximations of the Sierpinksi triangle.

Properties

The Sierpinski triangle has Hausdorff dimension log(3)/log(2) ≈ 1.585, which follows from the fact that it is a union of three copies of itself, each scaled by a factor of 1/2.

If one takes Pascal's triangle with 2n rows and colors the even numbers white, and the odd numbers black, the result is an approximation to the Sierpinski triangle.

The area of a Sierpinski triangle is zero (in Lebesgue measure). This can been seen from the infinite iteration, where we remove 25% of the area left at the previous iteration.

Analogs in higher dimension

The tetrix is the three-dimensional analog of the Sierpinski triangle, formed by repeatedly shrinking a regular tetrahedron to one half its original height, putting together four copies of this tetrahedron with corners touching, and then repeating the process.

A Sierpinski pyramid and its 'inverse'

Self-assembly with DNA

Researchers in Erik Winfree's lab at the California Institute of Technology have also constructed self-assembling Sierpinski triangles using DNA tiles (Rothemund et al. 2004).

Computer program

Computer programs to draw Sierpinski triangles are usually done recursively in programming languages that permit explicit recursion such as Java.

import java.awt.*;
import java.applet.*;

public class SierpinskiTriangle extends Applet {
    private Graphics g;
    private int dMin=4;    // limit to recursion in pixels

    public void paint(Graphics g) {
        this.g = g;
        int d  = 1024;    // basis (width of the triangle)
        int x0 =   50;    // distance from the left
        int y0 =   50;    // distance from the top
        int h  = (int)(d*Math.sqrt(3)/2);    // height
        // so: suitable for an equilateral triangle
        int xA=x0,      yA=y0+h;    // (bottom-left)
        int xB=x0+d,    yB=y0+h;    // (bottom-right)
        int xC=x0+d/2,  yC=y0;    // equilateral triangle (top-center)
        int[] x = { xA, xB, xC };
        int[] y = { yA, yB, yC };

        drawSierpinskiTriangle( x, y, d/2 );     // start recursion
    }

    private void drawSierpinskiTriangle ( int[] x, int[] y, int d ) {
        if (d<=dMin) g.fillPolygon ( x, y, 3 );  // bottom of the recursion
        else {
            // centers of the sides:
            int xMc = (x[0]+x[1])/2,    yMc = (y[0]+y[1])/2;
            int xMb = (x[0]+x[2])/2,    yMb = (y[0]+y[2])/2;
            int xMa = (x[1]+x[2])/2,    yMa = (y[1]+y[2])/2;

            int[] xNew1 = { x[0], xMc, xMb };
            int[] yNew1 = { y[0], yMc, yMb };
            drawSierpinskiTriangle ( xNew1, yNew1, d/2 );    // recursion

            int[] xNew2 = { x[1], xMc, xMa };
            int[] yNew2 = { y[1], yMc, yMa };
            drawSierpinskiTriangle ( xNew2, yNew2, d/2 );    // recursion

            int[] xNew3 = { x[2], xMb, xMa };
            int[] yNew3 = { y[2], yMb, yMa };
            drawSierpinskiTriangle ( xNew3, yNew3, d/2 );    // recursion
        }
    }
}

See also

References

  • Weisstein, Eric W. "Sierpinski Sieve". MathWorld.
  • Paul W. K. Rothemund, Nick Papadakis, and Erik Winfree, Algorithmic Self-Assembly of DNA Sierpinski Triangles, PLoS Biology, volume 2, issue 12, 2004.

External links