当前位置: 首页 > 工具软件 > mpmath > 使用案例 >

python的matrix_Python mpmath.matrix方法代码示例

商夜洛
2023-12-01

# 需要导入模块: import mpmath [as 别名]

# 或者: from mpmath import matrix [as 别名]

def traverseTheHierarchy(self, startingStructureName=None, delegateFunction = None,

transformPath = [], rotateAngle = 0, transFlags = (0,0,0), coordinates = (0,0)):

#since this is a recursive function, must deal with the default

#parameters explicitly

if startingStructureName == None:

startingStructureName = self.rootStructureName

#set up the rotation matrix

if(rotateAngle == None or rotateAngle == ""):

rotateAngle = 0

else:

rotateAngle = math.radians(float(rotateAngle))

mRotate = mpmath.matrix([[math.cos(rotateAngle),-math.sin(rotateAngle),0.0],

[math.sin(rotateAngle),math.cos(rotateAngle),0.0],[0.0,0.0,1.0],])

#set up the translation matrix

translateX = float(coordinates[0])

translateY = float(coordinates[1])

mTranslate = mpmath.matrix([[1.0,0.0,translateX],[0.0,1.0,translateY],[0.0,0.0,1.0]])

#set up the scale matrix (handles mirror X)

scaleX = 1.0

if(transFlags[0]):

scaleY = -1.0

else:

scaleY = 1.0

mScale = mpmath.matrix([[scaleX,0.0,0.0],[0.0,scaleY,0.0],[0.0,0.0,1.0]])

#we need to keep track of all transforms in the hierarchy

#when we add an element to the xy tree, we apply all transforms from the bottom up

transformPath += [(mRotate,mScale,mTranslate)]

if delegateFunction != None:

delegateFunction(startingStructureName, transformPath)

#starting with a particular structure, we will recursively traverse the tree

#********might have to set the recursion level deeper for big layouts!

if(len(self.structures[startingStructureName].srefs)>0): #does this structure reference any others?

#if so, go through each and call this function again

#if not, return back to the caller (caller can be this function)

for sref in self.structures[startingStructureName].srefs:

#here, we are going to modify the sref coordinates based on the parent objects rotation

# if (sref.sName.count("via") == 0):

self.traverseTheHierarchy(startingStructureName = sref.sName,

delegateFunction = delegateFunction,

transformPath = transformPath,

rotateAngle = sref.rotateAngle,

transFlags = sref.transFlags,

coordinates = sref.coordinates)

# else:

# print "WARNING: via encountered, ignoring:", sref.sName

#MUST HANDLE AREFs HERE AS WELL

#when we return, drop the last transform from the transformPath

del transformPath[-1]

return

 类似资料: