Vectors Dragged Through Floating Colour
The comb goes in. Pigment follows.
I’m watching the ox gall spread a drop of cobalt blue across the carrageenan surface when it hits me: I’m looking at a vector field. Each point on that floating skin has a direction it wants to move—outward from the pigment’s centre, influenced by surface tension gradients. When I drag the stylus through, I’m not mixing paint. I’m imposing a new field on top of the existing one, and the colour flows along the sum of both influences.
The Turkish masters who invented this technique in the 15th century didn’t have the vocabulary of vector calculus. But they understood it in their hands. Drag slowly, and the field dominates—you get those long, sinuous pulls. Drag fast, and turbulence breaks the laminar flow into feathers and whorls.
In computer graphics, we formalised this in the 1980s. A vector field assigns a direction and magnitude to every point in space. Use it for fluid simulation, particle systems, procedural textures. The maths aren’t complicated: sample the field at your position, move in that direction, repeat.
# A simple radial vector field in R
vec_field <- function(x, y, cx = 0, cy = 0) {
dx <- x - cx
dy <- y - cy
mag <- sqrt(dx^2 + dy^2) + 0.001
list(vx = -dy / mag, vy = dx / mag) # perpendicular = spiral
}
# Trace a particle through the field
steps <- 80; x <- 1.5; y <- 0; path <- matrix(NA, steps, 2)
for (i in 1:steps) {
path[i,] <- c(x, y)
v <- vec_field(x, y)
x <- x + v$vx * 0.1; y <- y + v$vy * 0.1
}
plot(path, type = "l", asp = 1, main = "Spiral trace")
That R snippet creates a rotational field—every vector points perpendicular to the centre, so particles spiral inward. Change the field function and you get completely different patterns. The marbling trough offers the same latitude: substitute a rake for a stylus, alter your drag angle, and yesterday’s stone pattern becomes today’s peacock feathers.
program VectorTrace;
var
x, y, vx, vy, mag: real;
i: integer;
begin
x := 1.5; y := 0.0;
for i := 1 to 40 do begin
mag := sqrt(x*x + y*y) + 0.001;
vx := -y / mag; { perpendicular component }
vy := x / mag;
writeln('(', x:6:3, ', ', y:6:3, ')');
x := x + vx * 0.15;
y := y + vy * 0.15;
end;
end.
Pascal’s version traces the same spiral, just with more explicit arithmetic. Run it and you’ll see coordinates curving inward, each step determined entirely by position.
The catch—and there’s always a catch—is that real fluids don’t obey simple analytic fields. The carrageenan has viscosity gradients. The pigments interact with each other. My hand trembles. What makes marbling an art rather than a deterministic process is precisely the noise that no simulation captures cleanly.
I pulled my sixth sheet this morning. The pattern spiralled exactly once, then broke into chaos where two colours collided. The vector field I’d imagined met the vector field the trough imposed, and neither won.
It looked like weather. I’ll take it.