Je travaille sur un code qui créera un triangle visuel de Sierpinski en 3D, et pour que cela fonctionne, je dois utiliser un algorithme de Pascal Pascal qui va créer un tableau afin que je puisse utiliser mon algorithme pour créer mes triangles où ne pas mettre des triangles. Quoi qu'il en soit, le problème est que mon code qui arrange les triangles crée les triangles par colonne plutôt que par ligne comme le fait l'algorithme de Pascal, donc j'essaie juste de faire une solution rapide en ayant un sous-programme qui réorganise le tableau Pascal. Je suis juste perplexe sur la façon de le faire depuis je ne sais pas comment éviter les erreurs index out of range
.Comment changer de ligne et de colonne dans un tableau 2D?
Ceci est le code qui crée le tableau pour le triangle de Pascal.
TL: DR Je suis en train de faire un Réorganiser un tableau où les lignes sont les colonnes et les colonnes sont les lignes
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
Ceci est la sortie de l'impression du tableau. Je veux juste les lignes à colonnes et des colonnes pour être rangées
[[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]]
Voici le code complet si vous êtes curieux au sujet du projet, mais il faut rhinoscriptsyntax
de rendre le modèle.
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 ne pouvait pas dire si votre compréhension de la liste de transposition était du sudocode ou du code réel. Je suis assez nouveau pour Python, donc j'ai dû le chercher, mais merci pour l'aide maintenant je peux avoir une représentation réelle d'un triangle Sierpinski. – Dayman
Dayman: Non, pas de pseudo-code, juste le _Real Thing_ ™. ';-)' – martineau