I’ve been playing around a bit with Processing.org – a kinda-graphical programming language. As the topwritingservice.com writers at http://topwritingservice.com/ web and I wanted to capture and analyze one of the effects I wanted to play with was radial transparency - a color blob that fades to the edges. After playing around with drawing a few ellipses, I settled on a pixel-based routine. After playing around for a while withdrawing multiple ellipses, I settled on a pixel-based subroutine.
We create a new PGraphics
object to hold the blob, then for each pixel calculate the distance from the center as a proportion of the radius using the handy Math.hypot()
method. Then, to get nice smooth fade-outs near the edges, we invert it to get the distance from the edge and then use the square of that value to determine the transparency. This gives a smoother effect – if we don’t use the square then the edges don’t transition smoothly (probably something to do with the sensitivity of human vision / LCD monitors to colour being non-linear). Anyway, here’s the code:
UPDATE – turns out that using Math.hypot()
is very slow – switching to Math.sqrt()
speeds up the code x10. The new code is below.
void radialGradient(float x, float y, int c, int size) {
PGraphics pg = createGraphics(size, size, JAVA2D);
pg.beginDraw();
pg.background(30, 0);
int halfsize = size / 2;
for (int i = 0; i <= size; i += 1) {
for (int j = 0; j <= size; j += 1) {
// calculate distance to center
//float distance = (float) Math.hypot(i - size / 2, j - size / 2) / (size / 2);
//float distance = (float) sqrt(sq(i-size/2) + sq(j-size/2)) / (size/2);
float xDist = i - halfsize;
float yDist = j - halfsize;
float distance = (float) Math.sqrt(xDist*xDist + yDist*yDist) / halfsize;
float scale = 1 - distance;
if (scale < 0 ) {
scale = 0;
}
float transparency = 255 * (scale * scale);
int thisColour = color(c, int(transparency));
pg.set(i, j, thisColour);
}
}
pg.endDraw();
imageMode(CENTER);
image(pg, x, y);
}
Subscribe to articles from the programming category via RSS or ATOM
Comments