xxxxxxxxxx
// Based on:
// p5js.org Sine Wave example
// https://p5js.org/examples/math-sine-wave.html
// Distance between each horizontal location
let xspacing = 20;
// Width of entire wave
let w;
// Start angle theta at 0
let theta = 0.0;
// Height of wave
let amp = 10.0;
// let amp = 10.0;
// How many pixels before the wave repeats
let period = 900.0;
// Value for incrementing x
let dx;
// Using an array to store height values for the wave
let yvalues;
let xvalues;
let tArray;
var ang_vel = 0.5;
// Positve values move curve down
// Negative values move curve up
let offset = 0;
let offset_1, offset_2, offset_3, offset_4, offset_5;
var offset_scalar = 0;
let n;
let A, d, f;
let a0, a1, a2, a3;
let d0, d1, d2, d3;
let f0, f1, f2, f3;
/////////////////////////////////////////////////////////
function setup() {
createCanvas(800, 800);
// right click and open link in new tab
let link = createA(
"https://p5js.org/examples/math-sine-wave.html",
"based on"
);
link.position(0, 0);
wandaVision = [
color("#400B15"),
color("#D92949"),
color("#04ADBF"),
color("#F2A999"),
color("#8C2A2A"),
];
wandaVisionBrilho = [
color("#A60311"),
color("#D9042B"),
color("#260F13"),
color("#F2E9CE"),
color("#F27244"),
];
spidermanHomeC = [
color("#F20C49"),
color("#F20C60"),
color("#F20C78"),
color("#0A3873"),
color("#F2EDD0"),
];
batmanToy = [
color("#03588C"),
color("#4AA2D9"),
color("#F2CB05"),
color("#A68B03"),
color("#D9D9D9"),
];
var wd_scalar = 56;
w = width + wd_scalar;
var piScalar = 1;
dx = ((piScalar * TWO_PI) / period) * xspacing;
yvalues = new Array(floor(w / xspacing));
xvalues = new Array(floor(w / xspacing));
tvalues = new Array(floor(w / xspacing));
n = 1000000;
// let A = [1, 1, 1.5, 1.5];
// let d = [0.004, 0.001, 0.002, 0.0015];
// let f = [3, 1, 2, 2.5];
a0 = int(random(1, 2));
a1 = int(random(1, 3));
a2 = int(random(1, 4));
a3 = int(random(1, 5));
d0 = random(0.001, 0.019);
d1 = random(0.001, 0.029);
d2 = random(0.001, 0.039);
d3 = random(0.001, 0.049);
f0 = int(random(1, 4));
f1 = int(random(1, 6));
f2 = int(random(1, 8));
f3 = int(random(1, 10));
A = [a0, a1, a2, a3];
d = [d0, d1, d2, d3];
f = [f0, f1, f2, f3];
}
/////////////////////////////////////////////////////////
function draw() {
// background(wandaVision[0]);
background(wandaVisionBrilho[2]);
var diam_wd = 15;
var diam_ht = 15;
var t = frameCount;
// for (let i = 0; i <= n; i++) {
// tvalues[i] = Math.log10(i);
// }
//
// Sin, Cos, and Tan:
phil = wandaVision[2];
var fill_offset = 150;
phil.setAlpha(sin(t * 0.5) + fill_offset);
offset_1 = 0;
offset_2 = offset_1 + offset_scalar;
offset_3 = offset_2 + offset_scalar;
offset_4 = offset_3 + offset_scalar;
offset_5 = offset_4 + offset_scalar;
calcWaveSin(offset_1, ang_vel);
renderWave(phil, diam_wd, diam_ht);
calcWaveSin(offset_2, ang_vel);
renderWave(phil, diam_wd, diam_ht);
// calcWaveSin(offset_3, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveSin(offset_4, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
calcWaveSin(offset_5, ang_vel);
renderWave(phil, diam_wd, diam_ht);
phil = wandaVisionBrilho[4];
fill_offset = 100;
phil.setAlpha(sin(t * 0.5) + fill_offset);
calcWaveCos(offset_1, ang_vel);
renderWave(phil, diam_wd, diam_ht);
// calcWaveCos(offset_2, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveCos(offset_5, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveSinPowCos(offset_1, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveCosPowSin(offset_1, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveSinPowSin(offset_1, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveCosPowCos(offset_1, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// calcWaveTanPowSin(offset_1, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// phil = wandaVisionBrilho[4];
// calcWaveTan(offset, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
//
// Secant, Cosecant and Cotangent:
// phil = batmanToy[1];
// calcWaveSecant(offset, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// phil = wandaVisionBrilho[3];
// calcWaveCosecant(offset, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
// phil = wandaVision[3];
// fill_offset = 180;
// phil.setAlpha(sin(t * 0.5) + fill_offset);
// calcWaveCot(offset, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
/////////////////////////////////////////////////////////
calcWaveHarmono(A, d, f, t, amp, offset, ang_vel);
// renderWave(phil, diam_wd, diam_ht);
/////////////////////////////////////////////////////////
// ang_vel += 0.00001;
// ang_vel = 0.02;
offset += -0.05;
var off_scalar_mult = 25;
offset_scalar = sin(t * 0.01) * off_scalar_mult;
// period -= sin(t) + 0.1;
var piScalar = 1;
dx = ((piScalar * TWO_PI) / period) * xspacing;
amp += 0.1;
}
/////////////////////////////////////////////////////////
// FUNCTIONS:
/////////////////////////////////////////////////////////
function calcWaveSin(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + sin(x) * amp;
x += dx;
}
}
function calcWaveCos(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + cos(x) * amp;
x += dx;
}
}
function calcWaveTan(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + tan(x) * amp;
x += dx;
}
}
function calcWaveCot(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + (1 / tan(x)) * amp;
x += dx;
}
}
function calcWaveSecant(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + (1 / cos(x)) * amp;
x += dx;
}
}
function calcWaveCosecant(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + (1 / sin(x)) * amp;
x += dx;
}
}
function calcWaveSinPowCos(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + sin(pow(x, cos(x))) * amp;
x += dx;
}
}
function calcWaveCosPowSin(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + cos(pow(x, sin(x))) * amp;
x += dx;
}
}
function calcWaveSinPowSin(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + sin(pow(x, sin(x))) * amp;
x += dx;
}
}
function calcWaveCosPowCos(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + cos(pow(x, cos(x))) * amp;
x += dx;
}
}
function calcWaveTanPowSin(offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i < yvalues.length; i++) {
yvalues[i] = offset + tan(pow(x, sin(x))) * amp;
x += dx;
}
}
/////////////////////////////////////////////////////////
function calcWaveHarmono(A, d, f, t, amp, offset, ang_vel) {
theta += ang_vel;
let x = theta;
for (let i = 0; i <= n; i++) {
tvalues[i] = Math.log10(i);
}
for (let i = 0; i < yvalues.length; i++) {
// xvalues[i] =
// offset +
// A[0] * sin(t * f[0]) * exp(-d[0] * t) * amp +
// A[1] * sin(t * f[1]) * exp(-d[1] * t) * amp;
// yvalues[i] =
// offset +
// A[2] * sin(t * f[2]) * exp(-d[2] * t) * amp +
// A[3] * sin(t * f[3]) * exp(-d[3] * t) * amp;
// https://stackoverflow.com/questions/76762818/p5-number-vs-number
// Use (i === 0) ? 0 : (....) to avoid division by zero
xvalues[i] =
i === 0
? 0
: offset +
A[0] * sin(tvalues[i] * f[0]) * exp(-d[0] * tvalues[i]) * amp +
A[1] * sin(tvalues[i] * f[1]) * exp(-d[1] * tvalues[i]) * amp;
yvalues[i] =
i === 0
? 0
: offset +
A[2] * sin(tvalues[i] * f[2]) * exp(-d[2] * tvalues[i]) * amp +
A[3] * sin(tvalues[i] * f[3]) * exp(-d[3] * tvalues[i]) * amp;
x += dx;
}
}
/////////////////////////////////////////////////////////
function renderWave(phil, diam_wd, diam_ht) {
noStroke();
fill(phil);
for (let i = 0; i < yvalues.length; i++) {
// ellipse(i * xspacing, height / 2 + yvalues[i], diam_wd, diam_ht);
ellipse(width / 2 + xvalues[i], height / 2 + yvalues[i], diam_wd, diam_ht);
ellipse(width / 2 - xvalues[i], height / 2 - yvalues[i], diam_wd, diam_ht);
ellipse(width / 2 + xvalues[i], height / 2 - yvalues[i], diam_wd, diam_ht);
ellipse(width / 2 - xvalues[i], height / 2 + yvalues[i], diam_wd, diam_ht);
}
}
function mouseClicked() {
a0 = int(random(1, 2));
a1 = int(random(1, 3));
a2 = int(random(1, 4));
a3 = int(random(1, 5));
d0 = random(0.001, 0.019);
d1 = random(0.001, 0.029);
d2 = random(0.001, 0.039);
d3 = random(0.001, 0.049);
f0 = int(random(1, 4));
f1 = int(random(1, 6));
f2 = int(random(1, 8));
f3 = int(random(1, 10));
A = [a0, a1, a2, a3];
d = [d0, d1, d2, d3];
f = [f0, f1, f2, f3];
}