1

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) を与えるものです。私はこれを自分でやろうとしましたが、うまくいかないので、助けていただければ幸いです。ジェネレーターで動作するようにこれを書き直す必要がありますか? ソース

4

1 に答える 1