|
@@ -8,6 +8,7 @@ import math, random
|
|
from PIL import Image, ImageDraw
|
|
from PIL import Image, ImageDraw
|
|
import svgwrite
|
|
import svgwrite
|
|
import datetime
|
|
import datetime
|
|
|
|
+from sympy.geometry import Circle, Point
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -56,6 +57,9 @@ def generatePolygon( ctrX, ctrY, aveRadius, irregularity, spikeyness, numVerts )
|
|
|
|
|
|
angle = angle + angleSteps[i]
|
|
angle = angle + angleSteps[i]
|
|
|
|
|
|
|
|
+ for i in range(10):
|
|
|
|
+ points = fractalize(points)
|
|
|
|
+
|
|
return points
|
|
return points
|
|
|
|
|
|
def clip(x, min, max) :
|
|
def clip(x, min, max) :
|
|
@@ -65,6 +69,66 @@ def clip(x, min, max) :
|
|
else : return x
|
|
else : return x
|
|
|
|
|
|
|
|
|
|
|
|
+def fractalize(pts) :
|
|
|
|
+ print("Fractalize")
|
|
|
|
+ print(pts)
|
|
|
|
+ points = []
|
|
|
|
+ for v in range(0, len(pts)):
|
|
|
|
+ p1 = pts[v]
|
|
|
|
+ print(p1)
|
|
|
|
+ points.append(p1)
|
|
|
|
+ p2 = pts[0] if v >= len(pts)-1 else pts[v+1];
|
|
|
|
+ d = distance(p1,p2)
|
|
|
|
+
|
|
|
|
+ r = d*0.52
|
|
|
|
+ ps1,ps2 = circle_intersection((p1[0],p1[1],r), (p2[0],p2[1],r))
|
|
|
|
+ print(ps1)
|
|
|
|
+
|
|
|
|
+ if random.randint(1,2) == 2:
|
|
|
|
+ points.append(ps2)
|
|
|
|
+ else:
|
|
|
|
+ points.append(ps1)
|
|
|
|
+ return points
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def distance(p1,p2):
|
|
|
|
+ sq1 = (p1[0]-p2[0])*(p1[0]-p2[0])
|
|
|
|
+ sq2 = (p1[1]-p2[1])*(p1[1]-p2[1])
|
|
|
|
+ return math.sqrt(sq1 + sq2)
|
|
|
|
+
|
|
|
|
+def circle_intersection(circle1, circle2):
|
|
|
|
+ '''
|
|
|
|
+ @summary: calculates intersection points of two circles
|
|
|
|
+ @param circle1: tuple(x,y,radius)
|
|
|
|
+ @param circle2: tuple(x,y,radius)
|
|
|
|
+ @result: tuple of intersection points (which are (x,y) tuple)
|
|
|
|
+ '''
|
|
|
|
+
|
|
|
|
+ x1,y1,r1 = circle1
|
|
|
|
+ x2,y2,r2 = circle2
|
|
|
|
+
|
|
|
|
+ dx,dy = x2-x1,y2-y1
|
|
|
|
+ d = math.sqrt(dx*dx+dy*dy)
|
|
|
|
+ if d > r1+r2:
|
|
|
|
+ print("#1")
|
|
|
|
+ return None
|
|
|
|
+ if d < abs(r1-r2):
|
|
|
|
+ print("#2")
|
|
|
|
+ return None
|
|
|
|
+ if d == 0 and r1 == r2:
|
|
|
|
+ print("#3")
|
|
|
|
+ return None
|
|
|
|
+
|
|
|
|
+ a = (r1*r1-r2*r2+d*d)/(2*d)
|
|
|
|
+ h = math.sqrt(r1*r1-a*a)
|
|
|
|
+ xm = x1 + a*dx/d
|
|
|
|
+ ym = y1 + a*dy/d
|
|
|
|
+ xs1 = xm + h*dy/d
|
|
|
|
+ xs2 = xm - h*dy/d
|
|
|
|
+ ys1 = ym - h*dx/d
|
|
|
|
+ ys2 = ym + h*dx/d
|
|
|
|
+
|
|
|
|
+ return (xs1,ys1),(xs2,ys2)
|
|
|
|
|
|
|
|
|
|
base = "maps"
|
|
base = "maps"
|
|
@@ -79,13 +143,10 @@ except OSError as exception:
|
|
raise
|
|
raise
|
|
|
|
|
|
|
|
|
|
|
|
+for i in range(0, 1):
|
|
|
|
|
|
-
|
|
+ nv = random.randint(5,30)
|
|
-
|
|
+ verts = generatePolygon( ctrX=500, ctrY=500, aveRadius=300, irregularity=1, spikeyness=0.4, numVerts=nv )
|
|
-for i in range(0, 99):
|
|
|
|
-
|
|
|
|
- nv = random.randint(10,20)
|
|
|
|
- verts = generatePolygon( ctrX=500, ctrY=500, aveRadius=300, irregularity=1, spikeyness=0.15, numVerts=nv )
|
|
|
|
|
|
|
|
index = str(i) if i > 9 else '0'+str(i)
|
|
index = str(i) if i > 9 else '0'+str(i)
|
|
|
|
|
|
@@ -105,15 +166,15 @@ for i in range(0, 99):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- if random.randint(0,10) > 8:
|
|
+
|
|
- sda = "4 4"
|
|
+
|
|
- sdo = "5"
|
|
+
|
|
- else:
|
|
+
|
|
- sda = "0 0"
|
|
+ sda = "0 0"
|
|
- sdo = "0"
|
|
+ sdo = "0"
|
|
|
|
|
|
line = svg.line(p1, p2,
|
|
line = svg.line(p1, p2,
|
|
- stroke_width = "2",
|
|
+ stroke_width = "1",
|
|
stroke = "black",
|
|
stroke = "black",
|
|
stroke_linecap = "round",
|
|
stroke_linecap = "round",
|
|
stroke_dasharray = sda,
|
|
stroke_dasharray = sda,
|