Вы действительно должны делать это по частям, потому что вы, кажется, упускаете некоторые понятия
m = Matrix4()
Теперь у вас есть матрица из всех нулей.Затем вы хотите сделать это единичной матрицей.
m.setIdentity()
Ваша текущая реализация ломается множеством способов.
def setIdentity(self):
"""Sets the current Matrix to an identity matrix
self is an identity matrix after calling this method"""
row1 = Vec4(1,0,0,0)
row2 = Vec4(0,1,0,0)
row3 = Vec4(0,0,1,0)
row4 = Vec4(0,0,0,1)
#setIdentity.Matrix4()~
#return Matrix4(row1, row2, row3, row4)
self.m_values = [row1, row2, row3, row4]
Это устраняет две проблемы, не определяемые setIdentity
,и вместо того, чтобы возвращать новую матрицу, она модифицирует существующую.
Я исправлю ваш код ответа следующим образом.
class Matrix4():
def __init__(self, row1=None, row2=None, row3=None, row4=None):
"""Constructor for Matrix4
DO NOT MODIFY THIS METHOD"""
if row1 is None: row1 = Vec4()
if row2 is None: row2 = Vec4()
if row3 is None: row3 = Vec4()
if row4 is None: row4 = Vec4()
self.m_values = [row1,row2,row3,row4]
def __str__(self):
"""Returns a string representation of the matrix
DO NOT MODIFY THIS METHOD"""
toReturn = ''
if self is None: return '0.00 0.00 0.00 0.00\n0.00 0.00 0.00 0.00\n0.00 0.00 0.00 0.00\n0.00 0.00 0.00 0.00'
for r in range(0,4):
for c in range(0,4):
toReturn += "%.2f" % self.m_values[r].values[c]
if c != 3:
toReturn += ' '
toReturn += '\n'
return toReturn
def setIdentity(self):
"""Sets the current Matrix to an identity matrix
self is an identity matrix after calling this method"""
#Dont do this either, it is unescessary!
#m = Matrix4()
row1 = Vec4(1,0,0,0)
row2 = Vec4(0,1,0,0)
row3 = Vec4(0,0,1,0)
row4 = Vec4(0,0,0,1)
self.m_values = [row1, row2, row3, row4]
#No, do do this! this is causing the recursion!
#m.setIdentity()
#Stop returning a new matrix!
#return Matrix4(row1, row2, row3, row4)
m = Matrix4()
m.setIdentity()
print(m)
Код для создания матрицы и присвоения ей идентификатора.должно быть вне вашего класса.Вы используете класс в этой точке.Я добавил комментарии над удаленной строкой.Я только изменил метод setIdentity.