2

3D オブジェクトの座標を書き出そうとしていますが、一覧表示する方法がわかりません。

これまでのところ、私は持っています:

class threed:
    def __init__(self,length,width,height):
        self.h =height
        self.l = length
        self.w = width
        self.f=0
        self.lwh = (length,width,height)

for i in range(1,3):
      for j in range(1,3):
           for k in range(1,3):
                coordinates=threed(i,j,k)

問題は、関数が毎回変数座標を書き換えるため、たとえば座標 (1,1,1) にアクセスできないことです。

上記は 2x2x2 オブジェクト用であることに注意してください。

必要に応じて任意の座標を参照できるように効率的に記述するにはどうすればよいですか?

4

2 に答える 2

5

できるよ:

[threed(*x) for x in itertools.product(range(1, 3), range(1,3), range(1,3))]

各オブジェクトを持つこと。for3 つのループを使用することもできます。

[threed(x, y, z) for x in range(1, 3) for y in range(1,3) for z in range(1,3)]

メソッドをクラスに追加する__repr__と、結果をより簡単に確認できます。

def __repr__(self):
    return 'threed' + repr(self.lwh)

したがって、最初のコードの出力は次のようになります。

[threed(1, 1, 1), threed(1, 1, 2), threed(1, 2, 1), threed(1, 2, 2), 
 threed(2, 1, 1), threed(2, 1, 2), threed(2, 2, 1), threed(2, 2, 2)]

threedオブジェクトを比較できるようにするために、__eq__メソッドを追加できます。

def __eq__(self, other):
    return self.lwh == other.lwh
于 2012-07-30T01:41:12.407 に答える
1

後で効率的にアクセスするために、辞書に座標をcoordinates=threed(i,j,k)追加できるようになりました。

何かのようなもの:

obj3d = dict()
for i in range(1,3):
      for j in range(1,3):
           for k in range(1,3):
                key = (i, j, k)
                obj3d[key] = threed(*key)

次に、obj3d辞書があり、次のことができます。

  any_threed = obj3d[(1,1,1)]

もちろん、itertoolsetcを使用して座標を生成する方法を整理することもできますが、この回答は、後で座標にアクセスする効率的な方法を取得することに焦点を当てました。

于 2012-07-30T02:00:48.593 に答える