Use Processing Geometry Suite to do this easily.
Offset Style = Bevel
Offset Style = Round
Offset Style = Miter
Animated Code Example
Code...
import micycle.pgs.*;
PShape letter;
void setup() {
size(1000, 1000, FX2D);
colorMode(HSB, 1, 1, 1, 1);
letter = createFont(PFont.list()[(int) random(PFont.list().length)], 200, true).getShape('F');
letter = PGS_Transformation.translateTo(letter, width / 2, height / 2);
}
void draw() {
background(20);
PShape offsetCurves = PGS_Contour.offsetCurvesOutward(letter, PGS_Contour.OffsetStyle.ROUND, 15 + sin(frameCount*0.02f)*8, 25);
float hue = 0;
final float inc = 1f / offsetCurves.getChildCount();
for (PShape offsetCurve : offsetCurves.getChildren()) {
offsetCurve.setStroke(color((hue+frameCount*0.01f) % 1, 0.8f, 1, 1));
offsetCurve.setStrokeWeight(3);
hue += inc;
}
shape(offsetCurves);
}
Bonus
Applying PGS_Morphology.fieldWarp()
to offset curves.