# Michael Noll's early computer art - arranging graphic elements in a circular manner

## Michael Noll

A. Michael Noll (born 1939 in Newark, New Jersey) is an American engineer and professor emeritus at the Annenberg School for Communication and Journalism at the University of Southern California. He was a very early pioneer in digital computer art. Starting in the early 1960s, Noll spent nearly fifteen years performing basic research at Bell Labs in Murray Hill, New Jersey. It was in the summer of 1962 that he sent a memo explaining he had generated a series of "interesting and novel patterns" on the IBM 7090, the same model NASA employed to launch the first American astronaut into space.

Sinusoids

Michael Noll, Ninety Parallel Sinusoids with Linearly Increasing Period, 1964, Victoria and Albert Museum, London, (Photographic print of a computer-generated image)

Mondrian

"Somebody suggested it might be interesting to look at a painting and see if a computer could make a similar version. That got me into the work of Piet Mondrian, and I started looking at his paintings. He did a series with horizontal, vertical,and circular bars, so I made a computer version of it. Because of my interest in psychology, I got the idea to show reproductions of both works to a hundred people and see which they preferred, as well as which they thought was done with a computer. That experiment was published in a peer-reviewed journal, The Psychological Record."

Douglas Dodds, Interview with Michael Noll, July 2023

Michael Noll, Computer Composition with Lines, 1964 (Left)

Piet Mondrian, Composition with Lines, 1917 (Right)

## My reproduction attempts

Sinusoids

plot = Table[{Cos[1.055 Pi 2^x] + y}, {y, 0, 10, 0.111}];

Plot[
Evaluate @ plot, {x, 0, 0.9 Pi},
AspectRatio -> 1,
Axes -> False,
Background -> GrayLevel[0.9],
ImagePadding -> {{20, 20}, {60, 60}},
PlotStyle -> Directive[Thickness[0.002], Black],
ScalingFunctions -> {"Reverse", "Reverse"}]


Mondrian

Number of elements

n = 100;


Elements per row / column

e = 2;


Max line length

l = 6;

row =
Table[Replace[
RandomChoice[Range @ n, e],
a_ :> Line[{{a, i}, {a + RandomChoice[{1, l}], i}}], {1}],
{i, n}];

col =
Table[Replace[
RandomChoice[Range @ n, e],
a_ :> Line[{{i, a}, {i, a + RandomChoice[{1, l}]}}], {1}],
{i, n}];

annulus = Graphics[{GrayLevel[0.9], Annulus[{n/2, n/2}, {n/2, n}]}];

Show[lines, annulus,
Axes -> False,
Background -> GrayLevel[0.9],
ImageSize -> 400,
PlotRange -> {{-10, n + 10}, {-10, n + 10}}]


## Questions

Mondrian

My usage of annulus covers the lines creating very unpleasant cuts along the circle border. What I need is a circular region function which doesn't cut the line elements. With other words: Lines that start within the circle can extend beyond its perimeter like in the above Noll and Mondrian images.

Sinusoid

As a side question (not necessary for acceptance) I would like to find a nicer sinusoid formula avoiding the ScalingFunctions.

• Maybe lines = Graphics[{AbsoluteThickness[3.5], Select[Flatten[{row, col}], RegionWithin[Disk[{n/2, n/2}, n/2], #] &] }]  ? Apr 14 at 21:38
– eldo
Apr 14 at 23:41

Starting from eldo's initial solution and using RegionWithin in order to limit the set of generated lines to a certain disk area.

n = 100; e = 2; l = 6;

row =
Table[Replace[
RandomChoice[Range @ n, e],
a_ :> Line[{{a, i}, {a + RandomChoice[{1, l}], i}}], {1}],
{i, n}];

col =
Table[Replace[
RandomChoice[Range @ n, e],
a_ :> Line[{{i, a}, {i, a + RandomChoice[{1, l}]}}], {1}],
{i, n}];

lines =
Select[
Flatten[{row, col}], RegionWithin[Disk[{n/2, n/2}, n/2], #] &];

Graphics[{AbsoluteThickness[3.5] , lines},
Axes -> False,
Background -> GrayLevel[0.9],
ImageSize -> 400,
PlotRange -> {{-10, n + 10}, {-10, n + 10}}]


SeedRandom[1];

pts = RandomPoint[Disk[], 900];

Graphics[{LightBlue, Disk[], Thick, Black,
With[{r = RandomChoice[{{0, RandomReal[.05]}, {RandomReal[.05], 0}}]},
Line[{# - r, # + r}]] & /@ pts}]


ParametricPlot[{.9 Pi - x, v - Cos[1.055  Pi  2^x]},
{x, 0, 0.9  Pi}, {v, 0, 10},
MeshFunctions -> {#4 &},
Mesh -> 120,
PlotPoints -> 100,
BoundaryStyle -> None,
PlotStyle -> None,
AspectRatio -> 1, Axes -> False, Frame -> False,
Background -> GrayLevel[0.9],
ImagePadding -> {{20, 20}, {60, 60}}]


Sinusoid

Plot3D[0.1 y - Sin[Exp[1/E x]], {x, 0, 8}, {y, -3, 3}
, PlotStyle -> None
, PlotRange -> All
, Boxed -> False
, BoundaryStyle -> None
, Axes -> None
, Mesh -> {0, 60, 0}
, PlotPoints -> 20
]


Mondrian

Clear["Global*"];
SeedRandom[1];
pts1 = RandomPoint[Disk[], 150];
pts2 = RandomPoint[Disk[], 150];

lines1 = Line@CirclePoints[#, {RandomReal[{0.01, 0.06}], 0}, 2] & /@
pts1;
lines2 = Line@
CirclePoints[#, {RandomReal[{0.01, 0.06}], π/2}, 2] & /@
pts2;
Graphics[{
`