Algorithmic

Last update: 8 June 2021

Square

createPath

vertices = [[0,0], [100,0], [100,100], [0,100]];
inTangents=[]
outTangents=[]
closed = true;
createPath(vertices,inTangents, outTangents, closed);

8-Sided Rectangle (Beveled Rectangle)

// Coordinates
var v = [[1.5, 1.5], [2.0, 1.0], [2.0, -1.0], [1.5, -1.5], [-1.5, -1.5], [-2.0, -1.0], [-2.0, 1.0], [-1.5, 1.5]];

// Create a path with zero tangents (straight lines)
createPath(v, [], [], true);

Triangle

createPath

l = 100;
w = 50;
vertices = [[0,0], [-w,l], [w,l]]
inTangents=[]
outTangents=[]
closed = true;
createPath(vertices,inTangents, outTangents, closed);

Circle

$x = radius*sin(theta)\\ y = radius*cos(theta)$

createPath

var pts = 50;
var completion = 100 / 100;

var t, x, y;
var vertices = [];

for (i = 0; i < pts; i++) {
t = i / pts * Math.PI * 2 * completion; // element num/ num of elements ;
x = a * Math.cos(t);
y = a * Math.sin(t);
vertices[i] = [x, y]
}
createPath(vertices, [], [], 1)

Lemniscate

A Lemniscate is a mathematical curve shaped like the number 8 or the infinity symbol (∞). The term "lemniscate" comes from the Latin word "lemniscus," which means "ribbon."

function createLemniscatePath(center, radius, stretch, numPoints) {
var vertices = [];

for (var i = 0; i <= numPoints; i++) {
var t = i / numPoints;
var angle = 2 * Math.PI * t;
var x = radius * Math.sin(angle) / (1 + Math.cos(angle) * Math.cos(angle));
var y = radius * Math.sin(angle) * Math.cos(angle) / (1 + Math.cos(angle) * Math.cos(angle));
vertices.push(center + [stretch * x, y]);
}

return createPath(vertices, [], [], true);
}

// Parameters
var center = [thisComp.width, thisComp.height] / 2;
var stretch = 1;
var numPoints = 50;

// Generate the Lemniscate path

Eight curve

$x= a *sin(t)\\y=asin(t)cos(t)$

Position

// source: Dan Ebbert

center = [thisComp.width,thisComp.height]/2;
period = 3;
angle = 2*Math.PI*time/period;
center + [x,y]

Torus

$x=(a+bcosu)cosv \\ y=(a+bcosu)sinv\\ z=bsinu$

Position

u = 1
v = 2
a = 540;

x = a*Math.cos(v*time)*Math.sin(u*time);
y = a*Math.cos(v*time)*Math.cos(u*time);
[x,y]+[thisComp.width/2,thisComp.height/2]

createPath

var pts = 50;
var u = 1
var v = 10;
var a = 75 // inner radius
var c = 450 // outer radius
var completion = 100 / 100;

var t, x, y;
var vertices = [];

for (i = 0; i < pts; i++) {
t = i / pts * Math.PI * 2 * completion; // element num/ num of elements ;
x = (c + a * Math.cos(v * t)) * Math.cos(u * t);
y = (c + a * Math.cos(v * t)) * Math.sin(u * t);
vertices[i] = [x, y]
}
createPath(vertices, [], [], 1)

Wavy Circle

Position

u = 1
v = 10;
a = 75 // inner radius
c = 450 // outer radius
phase = 10; // animate this

x = (c+a*Math.cos(v*phase))*Math.cos(u*phase);
y = (c+a*Math.cos(v*phase))*Math.sin(u*phase);
[x,y]+[thisComp.width/2,thisComp.height/2]

freq = 60;
mul = 500;

z = time*mul
value  + [x,y,z]

Archimedes Spiral

createPath

// connect to sliders
let w = 1000;
let points = 200;
let steps = 20;
let angle = 0;

let r = w / 2;
let step = (Math.PI * 2) / steps;
let vertices = [];

//main
for (i = 0; i < points; i++) {
angle += step;
radius = i / points * r;
vertices[i] = [x, y];
}

createPath(vertices, [], [], 0)

Phyllotaxis

Position

var a = 137.508;
var r = 25;

var theta = degreesToRadians(myIndex * a);
var myIndex = index - thisComp.layer("controls").index;

x = r * Math.sqrt(myIndex) * Math.cos(theta);
y = r * Math.sqrt(myIndex) * Math.sin(theta);

[x, y] + [thisComp.width, thisComp.height] / 2;

Harmonic Motion

createPath

// var ctrl = thisLayer;
var inc = 1500;
var amp = 300;
var n = 30;
var freq = .5
var seed = 185;

var vertices = [];
var x, y, pt, phase;
seedRandom(seed, true)
var offset = random() * Math.PI * 2

for (i = 0; i < n; i++) {
pt = i / (n - 1);
x = inc * pt

phase = time * freq * Math.PI * 2 + pt * Math.PI
//phase += offset;

y = amp * Math.sin(phase);
//y *= Math.sin(phase / 2);
//y *= Math.sin(phase / 3);
//y += noise(time + pt) * 100;

// create point
vertices[i] = [x, y]
}

createPath(vertices, [], [], 0)

Knots

https://en.wikipedia.org/wiki/Knot_%28mathematics%29

Last updated