50 lines
1.1 KiB
Awk
50 lines
1.1 KiB
Awk
function clamp(v){ return v<0?0:(v>1?1:v) }
|
|
function color_lerp(p, q, r1, g1, b1, r2, g2, b3, x){
|
|
t = (x - p) / (q - p)
|
|
t = clamp(t)
|
|
r = int(r1 + t*(r2 - r1) + 0.5)
|
|
g = int(g1 + t*(g2 - g1) + 0.5)
|
|
b = int(b1 + t*(b2 - b1) + 0.5)
|
|
return sprintf("#%02X%02X%02X", r, g, b)
|
|
}
|
|
BEGIN {
|
|
# external variables
|
|
# PTS is voronoi centers
|
|
# W is canvas width
|
|
# H is canvas height
|
|
# FADE is fade max distance
|
|
# C1 is first color in gradient
|
|
# C2 is secont color in gradient
|
|
|
|
if (C1 == "") C1 = "0,0,0"
|
|
if (C2 == "") C2 = "255,255,255"
|
|
split(C1, c1, ",")
|
|
split(C2, c2, ",")
|
|
|
|
n = split(PTS, pairs, " ")
|
|
for (i = 1; i <= n; ++i) {
|
|
split(pairs[i], xy, ",")
|
|
px[i] = xy[1] + 0
|
|
py[i] = xy[2] + 0
|
|
}
|
|
|
|
for (y = 0; y < H; y++)
|
|
for (x = 0; x < W; x++) {
|
|
min_d = 1e308
|
|
for (i = 1; i <= n; i++) {
|
|
dx = x - px[i]
|
|
dy = y - py[i]
|
|
d = sqrt(dx*dx + dy*dy)
|
|
if (d < min_d)
|
|
min_d = d
|
|
}
|
|
|
|
fade = FADE - min_d
|
|
if (fade < 0) fade = 0
|
|
|
|
color = color_lerp(0, FADE, c1[1],c1[2],c1[3], c2[1],c2[2],c2[3], fade)
|
|
|
|
printf "fill %s point %d,%d\n", color, x, y
|
|
}
|
|
}
|