chore(formatting): ran black to format sources
This commit is contained in:
parent
45c11da77d
commit
6f2940947e
6 changed files with 1172 additions and 166 deletions
174
icon/make.py
174
icon/make.py
|
@ -1,109 +1,133 @@
|
|||
import svgwrite
|
||||
import random
|
||||
import time
|
||||
from math import factorial,sin,cos,pi
|
||||
from math import factorial, sin, cos, pi
|
||||
from itertools import permutations
|
||||
import tsp as m_tsp
|
||||
|
||||
def dist(p1,p2):
|
||||
return dist2(p1,p2)**0.5
|
||||
|
||||
def dist(p1, p2):
|
||||
return dist2(p1, p2) ** 0.5
|
||||
|
||||
|
||||
def dist2(p1,p2):
|
||||
diff=0
|
||||
for a,b in zip(p1,p2):
|
||||
diff+=(a-b)**2
|
||||
def dist2(p1, p2):
|
||||
diff = 0
|
||||
for a, b in zip(p1, p2):
|
||||
diff += (a - b) ** 2
|
||||
return diff
|
||||
|
||||
|
||||
def tsp(points):
|
||||
res=[]
|
||||
res = []
|
||||
for idx in m_tsp.tsp(points)[1]:
|
||||
res.append(points[idx])
|
||||
return res
|
||||
|
||||
|
||||
def make_points(n,size,min_dist=0):
|
||||
min_dist*=min_dist
|
||||
points=[]
|
||||
while len(points)<n:
|
||||
px,py=random.random(),random.random()
|
||||
px*=size/2
|
||||
py*=size/2
|
||||
px+=70
|
||||
py+=70
|
||||
valid=True
|
||||
def make_points(n, size, min_dist=0):
|
||||
min_dist *= min_dist
|
||||
points = []
|
||||
while len(points) < n:
|
||||
px, py = random.random(), random.random()
|
||||
px *= size / 2
|
||||
py *= size / 2
|
||||
px += 70
|
||||
py += 70
|
||||
valid = True
|
||||
for p in points:
|
||||
if dist2(p,(px,py))<min_dist:
|
||||
valid=False
|
||||
if dist2(p, (px, py)) < min_dist:
|
||||
valid = False
|
||||
break
|
||||
if valid:
|
||||
points.append((px,py))
|
||||
print("{}/{}".format(len(points),n))
|
||||
points.append((px, py))
|
||||
print("{}/{}".format(len(points), n))
|
||||
return points
|
||||
def generate(seed,name=None,small=False):
|
||||
sd=1
|
||||
if small:
|
||||
sd=2
|
||||
random.seed(seed)
|
||||
w=2
|
||||
max_rings=3
|
||||
num_points=5
|
||||
min_dist=10+10+20*(max_rings+1)
|
||||
base_r=10
|
||||
ring_step=lambda v:10+v*10
|
||||
size=1000
|
||||
if name is None:
|
||||
name=seed
|
||||
dwg=svgwrite.Drawing(filename="out/{}.svg".format(name))
|
||||
dwg.defs.add(dwg.style(".background { fill: #222; }"))
|
||||
dwg.add(dwg.rect(size=('100%','100%'), class_='background'))
|
||||
print("Generating points...")
|
||||
color="#eee"
|
||||
pos=make_points(num_points,size,min_dist=min_dist)
|
||||
print("TSP...")
|
||||
pos=tsp(pos)
|
||||
for (x1,y1),(x2,y2) in zip(pos,pos[1:]):
|
||||
if small:
|
||||
x1/=sd
|
||||
x2/=sd
|
||||
y1/=sd
|
||||
y2/=sd
|
||||
line=dwg.add(dwg.line((x1,y1),(x2,y2),stroke_width=w,stroke=color))
|
||||
|
||||
for (px,py) in pos:
|
||||
base_r=3
|
||||
|
||||
def generate(seed, name=None, small=False):
|
||||
sd = 1
|
||||
if small:
|
||||
sd = 2
|
||||
random.seed(seed)
|
||||
w = 2
|
||||
max_rings = 3
|
||||
num_points = 5
|
||||
min_dist = 10 + 10 + 20 * (max_rings + 1)
|
||||
base_r = 10
|
||||
ring_step = lambda v: 10 + v * 10
|
||||
size = 1000
|
||||
if name is None:
|
||||
name = seed
|
||||
dwg = svgwrite.Drawing(filename="out/{}.svg".format(name))
|
||||
dwg.defs.add(dwg.style(".background { fill: #222; }"))
|
||||
dwg.add(dwg.rect(size=("100%", "100%"), class_="background"))
|
||||
print("Generating points...")
|
||||
color = "#eee"
|
||||
pos = make_points(num_points, size, min_dist=min_dist)
|
||||
print("TSP...")
|
||||
pos = tsp(pos)
|
||||
for (x1, y1), (x2, y2) in zip(pos, pos[1:]):
|
||||
if small:
|
||||
base_r=5
|
||||
px/=sd
|
||||
py/=sd
|
||||
if random.random()>0.8:
|
||||
dwg.add(dwg.circle((px,py),r=base_r+random.random()*base_r,stroke_width=w,stroke='#0ae')).fill('#0ae')
|
||||
x1 /= sd
|
||||
x2 /= sd
|
||||
y1 /= sd
|
||||
y2 /= sd
|
||||
line = dwg.add(dwg.line((x1, y1), (x2, y2), stroke_width=w, stroke=color))
|
||||
|
||||
for (px, py) in pos:
|
||||
base_r = 3
|
||||
if small:
|
||||
base_r = 5
|
||||
px /= sd
|
||||
py /= sd
|
||||
if random.random() > 0.8:
|
||||
dwg.add(
|
||||
dwg.circle(
|
||||
(px, py),
|
||||
r=base_r + random.random() * base_r,
|
||||
stroke_width=w,
|
||||
stroke="#0ae",
|
||||
)
|
||||
).fill("#0ae")
|
||||
else:
|
||||
dwg.add(dwg.circle((px,py),r=base_r+random.random()*base_r,stroke_width=w,stroke=color)).fill(color)
|
||||
r=base_r
|
||||
for _ in range(random.randint(1,max_rings)):
|
||||
dwg.add(
|
||||
dwg.circle(
|
||||
(px, py),
|
||||
r=base_r + random.random() * base_r,
|
||||
stroke_width=w,
|
||||
stroke=color,
|
||||
)
|
||||
).fill(color)
|
||||
r = base_r
|
||||
for _ in range(random.randint(1, max_rings)):
|
||||
if small:
|
||||
random.random()
|
||||
random.random()
|
||||
random.random()
|
||||
continue
|
||||
r+=ring_step(random.random())
|
||||
ring_col=color
|
||||
if random.random()>0.75:
|
||||
ring_col="#ea0"
|
||||
circ=dwg.add(dwg.circle((px,py),r=r,stroke_width=w,stroke=ring_col))
|
||||
circ.fill(color,opacity=0)
|
||||
d=random.random()*pi*2
|
||||
dx=cos(d)
|
||||
dy=sin(d)
|
||||
m=random.random()
|
||||
moon=dwg.add(dwg.circle((px+dx*r,py+dy*r),r=2+2*m,stroke_width=w,stroke=ring_col))
|
||||
r += ring_step(random.random())
|
||||
ring_col = color
|
||||
if random.random() > 0.75:
|
||||
ring_col = "#ea0"
|
||||
circ = dwg.add(dwg.circle((px, py), r=r, stroke_width=w, stroke=ring_col))
|
||||
circ.fill(color, opacity=0)
|
||||
d = random.random() * pi * 2
|
||||
dx = cos(d)
|
||||
dy = sin(d)
|
||||
m = random.random()
|
||||
moon = dwg.add(
|
||||
dwg.circle(
|
||||
(px + dx * r, py + dy * r),
|
||||
r=2 + 2 * m,
|
||||
stroke_width=w,
|
||||
stroke=ring_col,
|
||||
)
|
||||
)
|
||||
moon.fill(ring_col)
|
||||
|
||||
dwg.save()
|
||||
|
||||
|
||||
seed=-4
|
||||
generate(seed,"icon_1",small=False)
|
||||
generate(seed,"icon_1_small",small=True)
|
||||
seed = -4
|
||||
generate(seed, "icon_1", small=False)
|
||||
generate(seed, "icon_1_small", small=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue