From 58f779c430220de9ea5a5743ad832f5e051bf8b3 Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Mon, 27 Feb 2023 19:27:32 -0800 Subject: [PATCH] Wu-ish lines. --- implementations/uvm-ncc/graphics.h | 6 ---- implementations/uvm-ncc/neat_wu_lines.py | 44 +++++++++++++++++++++++ implementations/uvm-ncc/wu_demo.png | Bin 0 -> 916 bytes implementations/uvm-ncc/wu_lines.py | 38 ++++++++++++++++++++ 4 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 implementations/uvm-ncc/neat_wu_lines.py create mode 100644 implementations/uvm-ncc/wu_demo.png create mode 100644 implementations/uvm-ncc/wu_lines.py diff --git a/implementations/uvm-ncc/graphics.h b/implementations/uvm-ncc/graphics.h index 4b6a6bf..2514bf5 100644 --- a/implementations/uvm-ncc/graphics.h +++ b/implementations/uvm-ncc/graphics.h @@ -161,9 +161,3 @@ carefree_wu_line(u32* dest, size_t dest_stride, u64 x, u64 y, u64 w, u64 h, u32 } } - - - - - - diff --git a/implementations/uvm-ncc/neat_wu_lines.py b/implementations/uvm-ncc/neat_wu_lines.py new file mode 100644 index 0000000..9157da2 --- /dev/null +++ b/implementations/uvm-ncc/neat_wu_lines.py @@ -0,0 +1,44 @@ +from PIL import Image, ImageDraw + + +def draw_wu_line(draw, x, y, w, h): + # Without loss of generality only lines in the first oc + assert(w > 0 and h > 0 and w > h) + k = 0xffff * h // w + print(bin(k), hex(k), k) + x1 = x + w - 1 + y1 = y + h - 1 + print(x1, y1) + d = 0 + while x1 > x: + draw.point([(x, y), (x1, y1)], fill=(0, 0, 0, 0xff - (d >> 8))) + draw.point([(x, y + 1), (x1, y1 - 1)], fill=(0, 0, 0, d >> 8)) + x += 1 + x1 -= 1 + if d + k >= 0xFFFF: + d = k - (0xFFFF - d) + y += 1 + y1 -= 1 + else: + d += k + if x1 == x: + if y1 == y: + points = [(x, y)] + alpha = 0xff + else: + points = [(x, y), (x, y1)] + alpha = 0x7f + draw.point(points, fill=(0, 0, 0, alpha)) + +size = 100, 50 +im = Image.new('RGBA', size) +d = ImageDraw.Draw(im, 'RGBA') + +#draw_wu_line(d, 0, 0, *size) + +for w in range(51, 100): + draw_wu_line(d, 0, 0, w, 50) + +base = Image.new('RGBA', size, (0xff, 0xff, 0xff, 0xff)) +base.alpha_composite(im) +base.save('wu_demo.png') diff --git a/implementations/uvm-ncc/wu_demo.png b/implementations/uvm-ncc/wu_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca818e4fb9a9a973c6efd648742560e0a5f82c7 GIT binary patch literal 916 zcmV;F18e+=P)R;;M3 z&9e5nuX>#Bz1`c7nK@^h=ksovo%!+S7jD=RB3l}gFpaS69roZN@og`Fx(emNPUoBy*#$cq2sQ`udu2&Y5l7 z?CI%=S(e32(_|wfBVKRx74HfWxxKx`ad5hbUKZ4GMNk>YvbeN zZf*1xpB5r=cXx-!S~{J^awaAwoZRRuz9mE?lgVH?H#av}&eYVD6SwybjtLRDzrV+F zE-x>!oayOlryup>a7BnnHk-wA&d<-WoSB&!Hy>NJxGqHG;o$+xIXykaa%N{|y_%pr zo(d6pe0;=mj*gC)X`0M5O*S_-Cu5E>NE0IR{QS%~=ZtgClF1|y z*4Ea*Fbt@ws)9%)0-KwgvS)dQazaF2US1#?jl#mh0t5m9SXx?wL?R)3ma8Z&M5ItC zz{bV~1cO1)bsfUtFmTRg&vKly5h7A779kdkK`0agP1C@#EQrVBP%4#VPy04yDMX}H zDnUFR2g|ZR(=-T$LJ*6^pja%*p7tfmUdZoo&LJEQgRbik3~cXt=d86F>(nwngFE(!Sn`}_M?PG4Uimebta?D(@t$R|lAlUPny zR~O1@ZEbbr{v_lZ92^{=oc8v1Jl5LU+P-{G65;4hd0=3fTjQw~!FUAR&rDLKK69Ccs q#ULSyK|&ORgeV3HQ4A8I7{36%$&njuM)kV@0000 0 and h > 0 and w > h + k = 0xffff * h // w + d = k >> 1 + while w > 0: + w -= 1 + intensity = d >> 8 + draw.point([(x, y )], fill=(0, 0, 0, 0xff - intensity)) + draw.point([(x, y + 1)], fill=(0, 0, 0, intensity)) + x += 1 + if d + k >= 0xFFFF: + d = k - (0xFFFF - d) + y += 1 + else: + d += k + +size = 100, 50 +im = Image.new('RGBA', size) +d = ImageDraw.Draw(im, 'RGBA') + +# Diagonal line +#draw_wu_line(d, 0, 0, *size) + +# Nearly 45 degrees. +#draw_wu_line(d, 0, 0, 51, 50) + +# Nearly horizontal line. +#draw_wu_line(d, 0, 0, 100, 5) + +draw_wu_line(d, 0, 0, 100, 33) + +base = Image.new('RGBA', size, (0xff, 0xff, 0xff, 0xff)) +base.alpha_composite(im) +base.save('wu_demo.png')