Context Free Art

Below are images I created using Context Free Art, an open source programming language for producing images. I have also provided the code I wrote to produce the images. Because of the use of randomness, the same code can be used to produce quite different images.

All code is copyright Bill Kronholm, licensed under GNU GPLv3.

60-60-60

Images in this series are fractal-like. As the drawing progresses, the lines drawn become smaller and thinner. The random flips of 30 and 60 degrees create the interesting details in the image. (Without these, it would just be two lines.) At the extremes, these details produce features reminiscent of dust.

/* Bill Kronholm 2017 */
/* GNU GPLv3 */
/* 606060.cfdg */

startshape SIXTY

//CF::Background = [a -1]

shape SIXTY {
	EDGE[]
	EDGE[f 30]
}

shape EDGE
rule 150 {
	FORK[]
	EDGE[ x 1 y 0 s 0.9]
}

rule 20 {
	FORK[]
	EDGE[ x 1 y 0 s 0.9]
	EDGE[ x 1 y 0 s 0.9 f 30]
}

rule 20 {
	FORK[]
	EDGE[ x 1 y 0 s 0.9]
	EDGE[ x 1 y 0 s 0.9 f 60]
}

path FORK {
	LINETO(1, 0)
	STROKE(0.03)[]
}

\(S^1 \vee S^1\)

The universal covering space of wedge of two circles.

/* Bill Kronholm 2017 */
/* GNU GPLv3 */
/* S1wedgeS1.cfdg */

startshape S1wedgeS1

//CF::Background = [b -1]

shape S1wedgeS1 {
    BRANCHUP[]
    BRANCHDOWN[]
    BRANCHLEFT[]
    BRANCHRIGHT[]
    LEMNISCATE[ x 0 y -3 s 2 ]
}

shape BRANCHUP{
    BRANCH[h 0 sat 1 b 1 r 0]
    BRANCHLEFT[x 0 y 1 s 0.5]
    BRANCHRIGHT[x 0 y 1 s 0.5]
    BRANCHUP[x 0 y 1 s 0.5]
    MARK[]
}

shape BRANCHDOWN{
    BRANCH[h 0 sat 1 b 1 r 180]
    BRANCHLEFT[x 0 y -1 s 0.5]
    BRANCHRIGHT[x 0 y -1 s 0.5]
    BRANCHDOWN[x 0 y -1 s 0.5]
    MARK[]
}

shape BRANCHLEFT{
    BRANCH[h 240 sat 1 b 1 r 90]
    BRANCHUP[x -1 y 0 s 0.5]
    BRANCHDOWN[x -1 y 0 s 0.5]
    BRANCHLEFT[x -1 y 0 s 0.5]
    MARK[]
}

shape BRANCHRIGHT{
    BRANCH[h 240 sat 1 b 1 r -90]
    BRANCHUP[x 1 y 0 s 0.5]
    BRANCHDOWN[x 1 y 0 s 0.5]
    BRANCHRIGHT[x 1 y 0 s 0.5]
    MARK[]
}

shape drawBRANCH{
    BRANCH[h 0]
}

path BRANCH {
	LINETO(0, 1)
	STROKE(0.04)[]
}

shape MARK{
    CIRCLE[s 0.1 b 0]
}

shape LEMNISCATE{
    INFTY[h 0 sat 1 b 1]
    INFTY[h 240 sat 1 b 1 r 180]
    INFTY[h 240 sat 1 b 1 f 90]
    INFTY [h 0 sat 1 b 1f 90 r 180]
    MARK[s 0.5]
}

path INFTY{
    CURVETO(-1, 0, -0.25, 0.25, -1, 0.5)
    STROKE(0.02)[]
}