Hacker's Delight 2nd Edition のアルゴリズム
pythonに移植
シンプルなヒルベルト曲線クラス。
class Hilbert():
def __init__(self,order=1):
self.x = -1
self.y = 0
self._step(0)
self._hil(0, 1, order)
def _hil(self, dirs, rot, order):
if (order == 0):
return
dirs += rot
self._hil(dirs, -rot, (order-1))
self._step(dirs)
dirs -= rot
self._hil(dirs, rot, (order-1))
self._step(dirs)
self._hil(dirs, rot, (order-1))
dirs -= rot
self._step(dirs)
self._hil(dirs, -rot, (order-1))
def _step(self, dirs):
dirs %= 4
if dirs == 0:
self.x += 1
elif dirs == 1:
self.y += 1
elif dirs == 2:
self.x -= 1
else:
self.y -= 1
#prints all points
#print(self.x,self.y)
#Could I "iterate" from here.
だから私が欲しいのは、 next() が呼び出されるたびに (x,y) を与えるものです。私はこれを自分でやろうとしましたが、うまくいかないので、助けていただければ幸いです。ジェネレーターで動作するようにこれを書き直す必要がありますか? ソース