2012-10-08 94 views
2

我有一個笛卡爾空間中的點集合。我可以使用python和numpy來計算由四個點(a,b,c,d)的給定子集合定義的二面角。下面是我的功能:如何從python中的二面角計算笛卡爾座標

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] 

我想旋轉只有一個二面角,如何使用python與numpy的和SciPy的我計算新的座標點的子合奏?

回答

1

如果你可以計算二面角,我假設你可以獲得你想旋轉你的點子集的軸。鑑於此,您可以通過在vpython中圍繞此軸旋轉所有點來輕鬆完成此操作 - 請參閱this example(轉至'旋轉矢量')。否則,您需要編程the appropriate equation(在this thread中詳細說明)。