Introduction
Introduction Statistics Contact Development Disclaimer Help
blind-spiral-gradient: add support for superelliptic sprials - blind - suckless…
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
commit d967cd0ef2e9d510f2c2588d47a9e811ebff7fda
parent e76229ac4f95ac8c6e4e38e60689a09a091e4048
Author: Mattias Andrée <[email protected]>
Date: Mon, 3 Jul 2017 00:34:05 +0200
blind-spiral-gradient: add support for superelliptic sprials
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M src/blind-spiral-gradient.c | 42 ++++++++++++++++++++++++-----…
1 file changed, 33 insertions(+), 9 deletions(-)
---
diff --git a/src/blind-spiral-gradient.c b/src/blind-spiral-gradient.c
@@ -8,6 +8,7 @@ static int logarithmic = 0;
static size_t width = 0;
static size_t height = 0;
static int with_params;
+static int with_vector;
#define PROCESS(TYPE, SUFFIX)\
@@ -18,6 +19,7 @@ static int with_params;
pixel_t buf[BUFSIZ / sizeof(pixel_t)];\
TYPE *params, x1, y1, x2, y2, b, r, u, v;\
TYPE x, y, a = 0, e = 1, p = 1, k = 1, ep = 1;\
+ TYPE x3 = 1, y3 = 0, rd = 1, P, R, Rx, Ry, Pe = 2, Re = 2, PRe…
size_t ix, iy, ptr = 0;\
for (;;) {\
while (stream->ptr < stream->frame_size) {\
@@ -31,11 +33,22 @@ static int with_params;
y1 = (params)[1];\
x2 = (params)[4];\
y2 = (params)[5];\
+ if (with_vector) {\
+ x3 = (params)[8];\
+ y3 = (params)[9];\
+ Pe = (params)[12];\
+ Re = (params)[13];\
+ rd = (params)[14];\
+ PRe = 1 / sqrt(Pe * Re);\
+ b = sqrt(x3 * x3 + y3 * y3);\
+ x3 /= b;\
+ y3 /= b;\
+ }\
if (with_params) {\
- a = (params)[8];\
- e = (params)[9];\
- p = (params)[10];\
- k = (params)[11];\
+ a = (params)[with_vector ? 16 : 8];\
+ e = (params)[with_vector ? 17 : 9];\
+ p = (params)[with_vector ? 18 : 10];\
+ k = (params)[with_vector ? 19 : 11];\
ep = 1 / (e * p);\
}\
memmove(stream->buf, stream->buf + stream->frame_size,\
@@ -59,7 +72,17 @@ static int with_params;
v -= u;\
v += 4 * (TYPE)M_PI;\
v = mod(v, 2 * (TYPE)M_PI);\
- r = sqrt(x * x + y * y);\
+ if (!with_vector) {\
+ r = sqrt(x * x + y * y);\
+ } else {\
+ P = x * x3 + y * y3;\
+ Rx = x - P * x3;\
+ Ry = y - P * y3;\
+ R = sqrt(Rx * Rx + Ry * Ry) / …
+ P = pow(abs(P), Pe);\
+ R = pow(abs(R), Re);\
+ r = pow(P + R, PRe);\
+ }\
r -= a;\
if (!logarithmic) {\
r = pow(r / b, ep);\
@@ -118,12 +141,13 @@ main(int argc, char *argv[])
else
eprintf("pixel format %s is not supported, try xyza\n", stream…
- if (stream.width > 3 || stream.height > 3 ||
+ if (stream.width > 5 || stream.height > 5 ||
stream.width * stream.height < 2 ||
- stream.width * stream.height > 3)
- eprintf("<stdin>: each frame must contain exactly 2 or 3 pixel…
+ stream.width * stream.height > 5)
+ eprintf("<stdin>: each frame must contain exactly 2, 3, 4, or …
- with_params = stream.width * stream.height == 3;
+ with_params = (stream.width * stream.height) & 2;
+ with_vector = stream.width * stream.height > 3;
stream.width = width;
stream.height = height;
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.