2018-12-29 20:38:36 +01:00
|
|
|
from math import sqrt
|
|
|
|
|
|
|
|
class Vector:
|
|
|
|
def __init__(self, x, y):
|
|
|
|
self.x = x
|
|
|
|
self.y = y
|
|
|
|
|
|
|
|
def __bool__(self):
|
|
|
|
return bool(self.x) or bool(self.y)
|
|
|
|
|
|
|
|
def __truediv__(self, divisor):
|
|
|
|
return Vector(self.x / divisor, self.y / divisor)
|
|
|
|
|
|
|
|
def __floordiv__(self, divisor):
|
|
|
|
return Vector(int(self.x / divisor), int(self.y / divisor))
|
|
|
|
|
|
|
|
def __add__(self, other):
|
|
|
|
return Vector(self.x + other.x, self.y + other.y)
|
|
|
|
|
|
|
|
def __sub__(self, other):
|
|
|
|
return Vector(self.x - other.x, self.y - other.y)
|
|
|
|
|
|
|
|
def __neg__(self):
|
|
|
|
return Vector(-self.x, -self.y)
|
|
|
|
|
|
|
|
def __invert__(self):
|
|
|
|
return Vector(self.y, self.x)
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return "(%d, %d)" % (self.x, self.y)
|
|
|
|
|
|
|
|
def __abs__(self):
|
|
|
|
return sqrt(self.x * self.x + self.y * self.y)
|
|
|
|
|
|
|
|
def hilbert(center, x, y):
|
|
|
|
if abs(x) < 1:
|
|
|
|
print(center)
|
|
|
|
else:
|
|
|
|
x /= 2
|
|
|
|
y /= 2
|
|
|
|
hilbert(center - x + y, -~x, -~y)
|
|
|
|
hilbert(center - x - y, x, y)
|
|
|
|
hilbert(center + x - y, x, y)
|
|
|
|
hilbert(center + x + y, ~x, ~y)
|
|
|
|
|
2018-12-29 21:02:44 +01:00
|
|
|
|
|
|
|
def hilbertgenerator(center, x, y):
|
|
|
|
if abs(x) < 1:
|
|
|
|
yield center
|
|
|
|
else:
|
|
|
|
x /= 2
|
|
|
|
y /= 2
|
|
|
|
for r in hilbertgenerator(center - x + y, -~x, -~y):
|
|
|
|
yield r
|
|
|
|
for r in hilbertgenerator(center - x - y, x, y):
|
|
|
|
yield r
|
|
|
|
for r in hilbertgenerator(center + x - y, x, y):
|
|
|
|
yield r
|
|
|
|
for r in hilbertgenerator(center + x + y, ~x, ~y):
|
|
|
|
yield r
|
|
|
|
|