Повернуть вектор вокруг точки xyz в плоскости xy - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь написать python код для поворота x, y, z компонентов вектора силы в точке, на которую действует сила. Сначала я хочу повернуть компоненты x и y вокруг точки в плоскости xy (то есть вращение вокруг оси z), а затем я хочу повернуть новый компонент x и компонент z вокруг точки в плоскости xz .

Точки очерчивают спираль, поэтому компоненты x и y обводят окружность, а компонента z дает высоту. Первое вращение вращает x и y вокруг точки, так что повернутое направление x указывает в радиальном направлении от центра спирали через точку, а повернутое направление y находится в тангенциальном направлении к окружности (поэтому каждая сила в каждая точка будет иметь различный угол поворота, в зависимости от ее расположения относительно центра спирали). Второе вращение поворачивает новый компонент x и компонент z на угол альфа.

Это моя функция ниже, и я получаю значения для нее, но я не уверен, что это правильно? Может ли кто-нибудь взглянуть и посмотреть, что они думают? Спасибо

'' 'def R_zy (точка, B, альфа):

# function to rotate x,y,z components of B counterclockwise around z-axis then counterclockwise 

вокруг оси y

if isinstance(point, np.ndarray):
    point = point.tolist()
else:
    point = point

#rotate x and y components of B around z-axis
if point[0] > 0 and point[1] >0:
    psi = 2*np.pi - math.atan(point[1]/point[0])

elif point[0] < 0 and point[1] >0:
    psi = (3/2)*np.pi - math.atan(-point[0]/point[1])

elif point[0] <0 and point[1] <0:
    psi = np.pi -  math.atan(point[1]/point[0])

else:
    psi = math.atan(-point[1]/point[0])

Bx_z = B[0]*np.cos(psi) - B[1]*np.sin(psi)
By_z = B[0]*np.sin(psi) + B[1]*np.cos(psi)
Bz_z = B[2]
B_z = [Bx_z, By_z, Bz_z]


#rotate x and z components of B_ around y-axis

theta = np.radians(360 - alpha)

Bx_zy = Bx_z*np.cos(theta) + Bz_z*np.sin(theta)
By_zy = By_z
Bz_zy = -Bx_z*np.sin(theta) + Bz_z*np.cos(theta)
B_zy = [Bx_zy, By_zy, Bz_zy]

return Bx_zy, By_zy, Bz_zy

' ''

...