Reflections on "Interaction Relabelling and Extreme Characters: Methods for Exploring Aesthetic Interactions" by J.P. Djajadiningrat, W.W. Gaver, and J.W. Frens

Dec 21, 2024
Reflections on "Interaction Relabelling and Extreme Characters: Methods for Exploring Aesthetic Interactions" by J.P. Djajadiningrat, W.W. Gaver, and J.W. Frens

Dec 21, 2024
// Parametric curve + tangent
x = a * sin(t), y = (b/2) * sin(2t)
function infinityPoint(tau, a, b) {
const x = a * sin(tau);
const y = (b * 0.5) * sin(2 * tau);
const dx = a * cos(tau);
const dy = b * cos(2 * tau);
const ang = atan2(dy, dx); // tangent angle
return { x, y, ang };
}We draw the track as a polyline (sampled points) and orient all glyphs by rotating to the tangent (rotate(p.ang)).
behaviors = [
{ name:'SEASONS', slots:32, period: base * PI * FEEDING_CYCLE, hue:30, glyph:'chev' },
{ name:'STROKES', slots: 8, period: base * 1.414 * FIN_STROKES, hue:280, glyph:'bar' },
{ name:'BREATH', slots:12, period: base * 1.618 * SLOW_BREATH, hue:205, glyph:'mark' },
{ name:'BLINK', slots:12, period: base * 2.718, hue:150, glyph:'eye' }
];
Seasons = Turtle feeding cycles
Fin Strokes = Distance Measuring
Breath = Religious Timing/Calendar
Blink = Day/Night Cycle
const seasonHue = seasonalHue(seasonCyc); // amber → green → violet → cyan
stroke(seasonHue, …); drawInfinityPolyline(...);Track Color
Season color slowly shifts via four stops using seasonalHue() and wrap-aware lerpHue():
const seasonHue = seasonalHue(seasonCyc); // amber → green → violet → cyan
stroke(seasonHue, …); drawInfinityPolyline(...);Track Color
Season color slowly shifts via four stops using seasonalHue() and wrap-aware lerpHue():
Reflections on "Interaction Relabelling and Extreme Characters: Methods for Exploring Aesthetic Interactions" by J.P. Djajadiningrat, W.W. Gaver, and J.W. Frens

Dec 21, 2024
Reflections on "Interaction Relabelling and Extreme Characters: Methods for Exploring Aesthetic Interactions" by J.P. Djajadiningrat, W.W. Gaver, and J.W. Frens

Dec 21, 2024