Warning: session_start(): open(/var/lib/php/sessions/sess_pob0roqgvfl8gql01p1id824kg, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
// from https://codepen.io/tculda/pen/pogwpOw
sclass MultiPointGradient is MakesBufferedImage {
LPair gradientPoints;
int w, h;
int[] pixels;
double[] gradientPointArray;
Color[] colors;
bool hasRun;
*(LPair *gradientPoints, int *w, int *h) {}
public int getWidth() { ret w; }
public int getHeight() { ret h; }
public BufferedImage getBufferedImage() {
run();
ret intArrayToBufferedImageWithoutAlpha(pixels, w, h);
}
run {
if (hasRun) ret;
set hasRun;
if (pixels == null) pixels = new int[w*h];
if (gradientPointArray == null)
gradientPointArray = doublePtsToDoubleArray(pairsA(gradientPoints));
if (colors == null)
colors = toArray(Color, pairsB(gradientPoints));
int n = l(colors);
double[] colorRatios = new[n];
int iPixel = 0;
for y to h:
for x to w: {
fillArray(colorRatios, 1);
for i to n:
for j to n:
if (i != j) {
var p1 = poi;
var p2 = gradientPoints.get(j).a;
var d = getProjectionDistance2(
gradientPointArray[i*2], gradientPointArray[i*2+1],
gradientPointArray[j*2], gradientPointArray[j*2+1],
x, y);
colorRatios[i] *= clampZeroToOne(d);
}
pixels[iPixel++] = blendMultipleColorsToInt(colors, colorRatios);
}
}
}