
Everything fits perfectly.
Here’s another piece using the loop drawing algorithm I created for my Loop Line Logics series of plots. Find the Processing code at Genuary 5.

Sound artist, media artist and composer for both humans and computers. So much banjo, too

Everything fits perfectly.
Here’s another piece using the loop drawing algorithm I created for my Loop Line Logics series of plots. Find the Processing code at Genuary 5.

Write “Genuary”. Avoid using a font.
I made these letters using the loop drawing algorithm I created for my Loop Line Logics series of plots. The Processing function code is below.
void hhAdjustaLoop(float x, float y, float loopWidth, float loopHeight, float loopLean, float loopEnd) {
/* draws adjustable loops
* extra curves added to start and end points to smooth out transitions
*/
float loopCenter = 0.5 * loopEnd; //calculate center position for the loop proportional to the end point
//derive anchor and control points - this keeps c1c2 and c3c1 always in the middle
//in order keep straight lines between control points and prevent kinks
//curve1
PVector c1a1 = new PVector(0, 0);
PVector c1c1 = new PVector(0, 0);
PVector c1c2 = new PVector(loopCenter, 0);
//the next PVectors are all assigned dynamically based on loopHeight value
PVector c1a2 = new PVector(0, 0); //declare a new PVector
//curve2
PVector c2c1 = new PVector(0, 0); //declare a new PVector
PVector c2c2 = new PVector(0, 0); //declare a new PVector
PVector c2a2 = new PVector(0, 0); //declare a new PVector
if (loopHeight > 0) {
c1a2.set(loopCenter+loopWidth+(loopLean*1.0), loopHeight*0.5-(loopLean*0.5));
c2c1.set(loopCenter+(loopWidth*2.0)+(loopLean*2.0), loopHeight-(loopLean*1.0));
c2c2.set(loopCenter-(loopWidth*2.0)+(loopLean*2.0), loopHeight+(loopLean*1.0));
c2a2.set(loopCenter-loopWidth+(loopLean*1.0), loopHeight*0.5+(loopLean*0.5));
} else {
c1a2.set(loopCenter+loopWidth+(loopLean*1.0), loopHeight*0.5+(loopLean*0.5));
c2c1.set(loopCenter+(loopWidth*2.0)+(loopLean*2.0), loopHeight+(loopLean*1.0));
c2c2.set(loopCenter-(loopWidth*2.0)+(loopLean*2.0), loopHeight-(loopLean*1.0));
c2a2.set(loopCenter-loopWidth+(loopLean*1.0), loopHeight*0.5-(loopLean*0.5));
}
//curve3
//PVector c3c1 = new PVector(loopCenter-loopWidth+(loopLean*1.0), (loopHeight*0.5)+(loopLean*0.5));
PVector c3c1 = new PVector(loopCenter, 0);
PVector c3c2 = new PVector(loopEnd, 0);
PVector c3a2 = new PVector(loopEnd, 0);
pushMatrix();
translate(x, y); //move to starting point
beginShape();
vertex(c1a1.x, c1a1.y); //first point
bezierVertex(c1c1.x, c1c1.y, c1c2.x, c1c2.y, c1a2.x, c1a2.y); //transition from start to center curve
bezierVertex(c2c1.x, c2c1.y, c2c2.x, c2c2.y, c2a2.x, c2a2.y); //center curve
bezierVertex(c3c1.x, c3c1.y, c3c2.x, c3c2.y, c3a2.x, c3a2.y); //transition from center curve to end
endShape();
popMatrix();
} //end hhAdjustaLoop()