slice_angle = 90

c = math.floor(sphere_radius)
center = (c + 0.5, c + 0.5)

def slice_radius(sphere_radius, z):
    return math.sqrt(max(sphere_radius**2 - z**2, 0))

for z in range(-half_num_steps, half_num_steps + 1):
    print('z', z)

    mu = z / (max_z - min_z)

    r1 = slice_radius(sphere_radius, z)
    points = circle(center, r1)
    r2 = slice_radius(inner_sphere_radius, z)
    points -= circle(center, r2)

    start_angle = interpolate(min_angle, max_angle, mu)
    end_angle = start_angle + slice_angle
    slice_1 = radial_slice(points, center, start_angle, end_angle)

    start_angle = start_angle + 180
    end_angle = start_angle + slice_angle
    slice_2 = radial_slice(points, center, start_angle, end_angle)

    points = slice_1 | slice_2

    print('-'*c*2)
    print(format_points(points, max_x=c*2, max_y=c*2, off='.'))
min_radius = 16.5
max_radius = 0

min_angle = -360 * 2.0
max_angle = 0

num_steps = 60

c = math.floor(max(min_radius, max_radius))
center = (c, c)

layers = []
for step in range(num_steps + 1):
    mu = step / num_steps

    outer = interpolate(min_radius, max_radius, mu)
    if outer <= 0:
        break

    inner = outer - ring_width

    start_angle = interpolate(min_angle, max_angle, mu)
    slice_angle = (slice_width / (outer * 2 * math.pi)) * 360

    end_angle = start_angle + slice_angle


    points = ring(center, outer, inner)
    points = radial_slice(points, center, start_angle, end_angle)
    layers.append(points)
import math
import vec
from shape_template import interpolate, polygon, format_points

radius = 5 * math.sqrt(2)
start_angle = 45
end_angle = 90 + 45

c = math.floor(radius)
center = (c, c)

num_steps = 20

def regular_polygon(radius, num_sides, start_angle):
    for i in range(num_sides):
        angle = start_angle - (i * 360) / num_sides
        point = (0, radius)
        yield vec.rotate(point, math.radians(angle))

for i in range(num_steps + 1):
    print(i)
    mu = i / num_steps
    angle = interpolate(start_angle, end_angle, mu)

    vertices = list(regular_polygon(radius, 4, angle))
    vertices = [vec.add(center, v) for v in vertices]
    points = polygon(vertices)

    print('-'*c*2)
    print(format_points(points, max_x=c*2, max_y=c*2, off='.'))