Как рассчитать декартовы координаты из двугранного угла в питоне

У меня есть ансамбль точек в декартовом пространстве. Я могу вычислить двугранные углы, определяемые заданным подмножеством из четырех точек (a, b, c, d), используя python с numpy. Ниже приведены мои функции:

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?


person bougui    schedule 08.10.2012    source источник


Ответы (1)


Если вы можете вычислить двугранник, я предполагаю, что вы можете получить ось, вокруг которой вы хотите повернуть свое подмножество точек. Учитывая это, вы можете легко сделать это, повернув все точки вокруг этой оси на угол, который вы хотите в vpython - см. в этом примере (перейдите к разделу "Поворот вектора"). В противном случае вам необходимо запрограммировать соответствующее уравнение (прописанное в < href="https://stackoverflow.com/questions/6802577/python-rotation-of-3d-vector">этот поток).

person Karol    schedule 08.10.2012