diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f0e7418 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +out/ +__pycache__/ +nft/ diff --git a/.hyphae_pixelflut.py.swp b/.hyphae_pixelflut.py.swp deleted file mode 100644 index b0ee823..0000000 Binary files a/.hyphae_pixelflut.py.swp and /dev/null differ diff --git a/hyphae_nft.py b/hyphae_nft.py index 349b886..2492b64 100644 --- a/hyphae_nft.py +++ b/hyphae_nft.py @@ -120,7 +120,7 @@ class Node(): def grow_sub(ctx, branch, branches, new_subs): # create a sub branch based on length - sub_branches = len(branch.nodes) // 7 * 3 + sub_branches = len(branch.nodes) // 8 * 2 if sub_branches == 0: return #sub_branches = 4 #print(f'creating {sub_branches} subs') @@ -140,6 +140,7 @@ def grow_sub(ctx, branch, branches, new_subs): break if found_ang: break + grow_branch_until_ended(new_branch, branches) new_branch.set_ignores(branch.nodes) branches.append(new_branch) @@ -154,8 +155,8 @@ def grow_subs(ctx, subs, branches): new_subs = [] for branch in subs: grow_sub(ctx, branch, branches, new_subs) - for branch in new_subs: - grow_branch_until_ended(branch, branches) + #for branch in new_subs: + # grow_branch_until_ended(branch, branches) return new_subs def main(): @@ -172,6 +173,7 @@ def main(): # place seeds branches = [] + r, g, b = colorsys.hsv_to_rgb(start_hue, 1.0, 1.0) #r, g, b = random_color() ctx.set_source_rgb(r, g, b) @@ -203,6 +205,10 @@ def main(): print(f'iteration {x} done') #surface.write_to_png("out/hyphae.png") # Output to PNG + r, g, b = colorsys.hsv_to_rgb(start_hue - 0.05, 1.0, 0.2) + ctx.set_source_rgb(r, g, b) + ctx.set_operator(cairo.Operator.DEST_OVER) + circle_fill(ctx, 0.5, 0.5, 0.4) finally: surface.write_to_png(f"out/hyphae_{run}_{rarity}.png") # Output to PNG print(f'run {run} complete') diff --git a/moon.py b/moon.py index 5fced55..1430f5a 100755 --- a/moon.py +++ b/moon.py @@ -6,10 +6,15 @@ import random from utils import circle_fill from utils import draw_crater from utils import random_color +from utils import moon_shade -WIDTH, HEIGHT = 1000, 1000 +WIDTH, HEIGHT = 100, 100 def main(): + + import sys + seed = sys.argv[1] + random.seed(seed) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT) ctx = cairo.Context(surface) @@ -48,10 +53,10 @@ def main(): # draw "shade" of the phase ctx.set_source_rgba(0.1, 0.1, 0.1, 0.95) - phase_pos = random.uniform(-0.5, 1.5) - circle_fill(ctx, phase_pos, 0.5, 0.5) - - surface.write_to_png("out/moon.png") # Output to PNG + phase_pos = random.uniform(-1.2, 1.2) + #circle_fill(ctx, phase_pos, 0.5, 0.5) + moon_shade(ctx, phase_pos) + surface.write_to_png(f"nft/{seed}_moon.png") # Output to PNG if __name__ == '__main__': main() diff --git a/utils.py b/utils.py index 3469ac3..39be2ba 100644 --- a/utils.py +++ b/utils.py @@ -5,7 +5,6 @@ def circle(ctx,x,y,r): ctx.arc(x,y,r,0,math.pi*2.) ctx.stroke() - def circle_fill(ctx,x,y,r): ctx.arc(x,y,r,0,math.pi*2.) ctx.fill() @@ -17,6 +16,34 @@ def draw_crater(ctx,x,y,r): ctx.arc(x + off_x, y + off_y, r, 0, math.pi*2.) ctx.fill() +def moon_shade(ctx, phase, nothern=True): + #phase=-0.4 + #x_max = 0.7 + x_max = 1. + # the shadow always has to "hug" one side - pick which + ctx.move_to(0.5, 0.0) + if phase > 0: + ctx.curve_to(-0.2, 0, -0.2, 1, 0.5, 1) + elif phase < 0: + ctx.curve_to(1.2, 0, 1.2, 1, 0.5, 1) + else: + return + #ctx.close_path() + #ctx.fill() + + #ctx.move_to(0.5, 0.0) + #ctx.curve_to(x_max*phase, 0.5-(0.5*phase), x_max*phase, 0.5+(0.5*phase), 0.5, 1) + #ctx.curve_to(0.5 + (x_max*phase), 0.5+(0.5*phase), 0.5+ (x_max*phase), 0.5-(0.5*phase), 0.5, 0) + + # helper x is the same for both points + h_x = abs(x_max * phase) + h_y = abs(h_x - 0.5) + + #y_c = (phase * 0.5) + #ctx.curve_to(x_max*phase, 0.5+abs(0.5*phase-0.5), (x_max*phase), 0.5-abs(0.5*phase-0.5), 0.5, 0) + ctx.curve_to(h_x, 0.5 + h_y, h_x, 0.5-h_y, 0.5, 0) + #ctx.close_path() + ctx.fill() def random_color():