xxxxxxxxxx
38
let decimals =200;
let pi = CalculatePi(decimals).replace(/([^0-9])/g,"");
function setup() {
createCanvas(400, 200);
colorMode(HSB,9,1,1);
noStroke();
}
function draw() {
background(0,0,0.5);
n = floor(decimals*mouseX/width);
for (i=0;i<=n;i++){
digit = int(pi.substring(i,i+1));
fill(digit,0.5,1);
rect (i*width/n,height,width/n,-20*digit);
// fill(0,0,1);
text (digit, i*width/n,height-20*digit-5);
}
}
// PI decimals calculation borrowed from: http://cosinekitty.com/pi.html
function CalculatePi(digits) {
var numDigits = parseInt(digits);
var numQuads = 3 + Math.floor((numDigits + 3) / 4); // extra quads for accuracy
BigMath_SetPrecision(numQuads);
var formula = [48, 18, 32, 57, -20, 239]; // pi = 48*arctan(1/18) + 32*arctan(1/57) - 20*arctan(1/239)
var sum = new BigReal("0");
for (var i = 0; i < formula.length; i += 2) {
var factor = formula[i];
var denom = formula[i + 1];
var term = BigReal_ArctanRecip(denom);
term = term.multiplyByInteger(factor);
sum = sum.add(term);
}
return sum.toSimpleString();
}