img = loadImage("test.png");
for (var i = 0 ; i < pointNum ; i++) {
pointPos[i]= createVector(img.width / 2 * sin(2*PI*i/pointNum) + img.width / 2, img.height / 2 * cos(2*PI*i/pointNum) + img.height / 2);
pointPosDraw[i] = createVector(radius * sin(2*PI*i/pointNum) + width / 2, radius * cos(2*PI*i/pointNum) + height / 2);
background(255, 245, 232);
console.log(frameRate());
for (var i = 0 ; i < substep ; i++) {
if (linecount < lineNum) {
pointIndexs = getBestPointPair();
stroke(0, lineAlpha*255);
line(pointPosDraw[p1].x, pointPosDraw[p1].y, pointPosDraw[p2].x, pointPosDraw[p2].y);
fadeLineFromImg(pointPos[p1].x, pointPos[p1].y, pointPos[p2].x, pointPos[p2].y);
function drawProgress(flag) {
translate(width/2, height-20);
rect(-progressWidth/2-1, -progressHeight/2-1, progressWidth+2, progressHeight+2)
var progress = linecount / lineNum;
rect(-progressWidth/2, -progressHeight/2, progressWidth, progressHeight);
rect(-progressWidth/2, -progressHeight/2, progressWidth*progress, progressHeight);
function getBestPointPair() {
var selectedPointPair = [];
var selectedNum = precision;
for (var i = 0 ; i < selectedNum ; i++) {
var p1 = floor(random(1)*pointNum);
var p2 = floor(random(1)*pointNum);
selectedPointPair[i] = [p1, p2];
for (var k = 0 ; k < selectedPointPair.length ; k++) {
var p1 = selectedPointPair[k][0];
var p2 = selectedPointPair[k][1];
var pointX1 = pointPos[p1].x;
var pointY1 = pointPos[p1].y;
var pointX2 = pointPos[p2].x;
var pointY2 = pointPos[p2].y;
var b = getLineBrightness(pointX1, pointY1, pointX2, pointY2);
return selectedPointPair[bestIndex];
function getLineBrightness(x1, y1, x2, y2) {
var xOffset = floor(abs(x1 - x2));
var yOffset = floor(abs(y1 - y2));
var step = xOffset < yOffset ? yOffset : xOffset;
for (var i = 0 ; i < step ; i++) {
var x = floor(x1 + (x2 - x1) * i / step);
var y = floor(y1 + (y2 - y1) * i / step);
var b = brightness(fget(x, y));
function fadeLineFromImg(x1, y1, x2, y2) {
var xOffset = floor(abs(x1 - x2));
var yOffset = floor(abs(y1 - y2));
var step = xOffset < yOffset ? yOffset : xOffset;
for (var i = 0 ; i < step ; i++) {
var x = floor(x1 + (x2 - x1) * i / step);
var y = floor(y1 + (y2 - y1) * i / step);
var index = y * img.width + x;
img.pixels[index] += fadeStep;
img.pixels[index+1] += fadeStep;
img.pixels[index+2] += fadeStep;
var index = j * img.width + i;
return color(img.pixels[index], img.pixels[index+1], img.pixels[index+2], img.pixels[index+3]);