如何从python中的二面角计算笛卡尔坐标

时间:2012-10-08 16:40:49

标签: python numpy scipy coordinates coordinate-transformation

我在笛卡尔空间中有一组点。我可以使用带有numpy的python计算由给定的四个点(a,b,c,d)的子集合定义的二面角。以下是我的职能:

def getDihedral(a,b,c,d):
 v1 = getNormedVector(a, b)
 v2 = getNormedVector(b, c)
 v3 = getNormedVector(c, d)
 v1v2 = numpy.cross(v1,v2)
 v2v3 = numpy.cross(v2,v3)
 return getAngle(v1v2,v2v3)

def getNormedVector(a,b):
 return (b-a)/numpy.linalg.norm(b-a)

def getAngle(a,b):
 return numpy.rad2deg(numpy.arccos(numpy.dot(a/numpy.linalg.norm(a),b.T/numpy.linalg.norm(b))))[0,0]

我想只旋转一个二面角,如何使用带有numpy和scipy的python计算点子集合的新坐标?

1 个答案:

答案 0 :(得分:1)

如果你可以计算二面角,我假设你可以获得你想要旋转你的子集点的轴。鉴于此,您可以通过将此轴周围的所有点旋转到vpython所需的角度来轻松完成此操作 - 请参阅this example(转到'旋转矢量')。否则,您需要对the appropriate equation进行编程(在this thread中详细说明)。