視覚的なSierpinski三角形を3Dプリントに作成するコードを作成しています。そのためには、作成するアルゴリズムを伝えるために配列を作成するPascal三角形アルゴリズムを使用する必要があります私の三角形は三角形を置かないところです。2D配列の行と列を切り替えるにはどうすればよいですか?
とにかく問題は、三角形を配置する私のコードは、パスカルアルゴリズムのように行ではなく三角形を作成するので、パスカル配列を再配置するサブルーチンを使って簡単に修正しようとしています。 index out of range
のエラーを回避する方法がわからないので、私はそれを行う方法をちょうど困惑しています。
これは、パスカルの三角形の配列を作成するコードです。
TL:DR私は、行、列と列これは、アレイの印刷出力された行
def pascal(n):
"""Prints out n rows of Pascal's triangle."""
row = [1]
global array
array = [[0 for x in range(int(n))] for y in range(int(n))]
array[0]=row
k = [0]
for x in range(int(max(n,0)-1)):
row=[l+r for l,r in zip(row+k,k+row)]
array[x+1]=row
return 1
されている配列を再配置しようとしています。私はちょうどあなたがこのプロジェクトについて興味がある場合は、完全なコードですが、それはモデルを作るためにrhinoscriptsyntax
が必要ですここで行は行
[[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1]]
する列と列になりたいです。
import rhinoscriptsyntax as rhino
import math
obj = rhino.GetObject("Select object to transform", preselect=True)
scale = 3
n=math.pow(3,scale)
def pascal(n):
"""Prints out n rows of Pascal's triangle."""
row = [1]
global array
array = [[0 for x in range(int(n))] for y in range(int(n))]
array[0]=row
k = [0]
for x in range(int(max(n,0)-1)):
row=[l+r for l,r in zip(row+k,k+row)]
array[x+1]=row
return 1
pascal(math.pow(2,scale))
print array
def remakePascal():
pass
my_horizontalVector = [[1,0,0,6],
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]]
my_tsfm = [[1,0,0,0], #identity
[0,1,0,0],
[0,0,1,0],
[0,0,0,1]]
def makeTriangle(scale,obj):
w=1/scale
h=1/scale
tsfm= [[w,0,0,0], #scale about origin
[0,h,0,0],
[0,0,1,0],
[0,0,0,1]]
output= rhino.XformMultiply(my_tsfm,tsfm)
new_obj=rhino.TransformObject(obj,output,copy=True)
return new_obj
def placeObj(i):
my_moveUpVector = [[1,0,0,(3/scale)*i],
[0,1,0,(4/scale)*i],
[0,0,1,0],
[0,0,0,1]]
vector = rhino.XformMultiply(my_tsfm,my_moveUpVector)
return vector
n=0
for i in range(int(math.pow(2,scale))):
if(i>0):
hPlace=rhino.XformMultiply(my_tsfm,my_horizontalVector)
obj = rhino.TransformObject(obj,hPlace)
factor = int(math.pow(2,scale))-n
for j in range(factor):
if():
pass
else:
Vertobj=makeTriangle(scale,obj)
tsfm = rhino.TransformObject(Vertobj,placeObj(j),copy=True)
n=n+1
Iあなたの転置リストの理解がスードコードか実際のコードかどうかは分かりませんでした。私はPythonにはかなり新しいので、それを見なければなりませんでしたが、今、私はSierpinski三角形の実際の人生表現を持つことができます助けてくれてありがとう。 – Dayman
デイマン:いいえ、疑似コードはなく、_Real Thing_™だけです。 ';-)' – martineau