我一直试图将欧拉角度与面法线向量的每个轴对齐,但到目前为止我还没有成功。 我尝试使用每个轴的方向余弦,但由于返回的值完全关闭,我还没有成功。 到目前为止,这是我的代码,我非常确定我的逻辑存在问题,特别是在我的数学中,但我无法弄明白。 我正在使用python和Maya。我正在修改操纵器枢轴以检查结果。 提前致谢! 这是我的代码:
import maya.cmds as cmds
import math as math
def Difference(a,b):
return list(set(a)- set(b))
def VertPosition(vert, axis):
return cmds.xform(vert,q = 1,ws = 1, t = 1)[axis]
def GetFaceNormal(face):
cmds.select(face,r=1)
faceNormal = cmds.polyInfo(fn=True)
return faceNormal
def GetNumericNormalValue(normalInfoString):
faceNormalDirection = [0,0,0]
normalInfoString = str(normalInfoString).split(' ')
faceNormalDirection[0] = float(normalInfoString[-3])
faceNormalDirection[1] = float(normalInfoString[-2])
faceNormalDirection[2] = float(normalInfoString[-1][:-5])
return faceNormalDirection
def NormalizeVector(vector):
vLength = VLength(vector)
for axis in range(0,3):
vector[axis] = vector[axis]/vLength
return vector
def VLength(vector):
vLength = 0
for axis in range(0,3):
vLength += pow(vector[axis],2)
vLength = math.sqrt(vLength)
return vLength
def GetAngleToAxis(vector):
vLength = VLength(vector)
angleToAxis = [0,0,0]
for axis in range(0,3):
angleToAxis[axis] += math.degrees(math.acos(vector[axis]/vLength))
return angleToAxis
faceSelection = cmds.filterExpand(sm=34)
normal = GetNumericNormalValue(GetFaceNormal(faceSelection))
normal = NormalizeVector(normal)
normalAngles=GetAngleToAxis(normal)
cmds.manipPivot(o=normalAngles)
答案 0 :(得分:0)
有几种方法可以解释数据,但如果给定一个矢量,则需要每个主轴的相应旋转,您可以采用矢量分量的反正切。组件的选择决定了旋转轴:
inVec = /(input vector)/
rotZ = atan(inVec.y/inVec.x)
rotY = atan(inVec.x/inVec.z)
rotX = atan(inVec.y/inVec.z)
结果是弧度。