Я пишу код для поворота матрицы (1x3) на Python 3.5.2.
Чтобы повернуть матрицу, я сделал функцию. (Не класс)
def rotate_rpy(posvec: Vector, rotvec: Vector) -> Vector :
return np.dot(np.dot(np.dot (posvec, rotate_rpy(rotvec[0]) ), rotate_pitch(rotvec[1]) ), rotate_yaw(rotvec[2]))
newpose = rotate_rpy(mypose, rotateang)#enbug
появляется ошибка, подобная этой
Traceback (most recent call last):
File "rotation_matrix.py", line 50, in <module>
newpose = rotate_rpy(mypose, rotateang)#enbug
File "rotation_matrix.py", line 35, in rotate_rpy
return np.dot(np.dot(np.dot (posvec, rotate_rpy(rotvec[0]) ), rotate_pitch(rotvec[1]) ), rotate_yaw(rotvec[2]))
TypeError: rotate_rpy() missing 1 required positional argument: 'rotvec'
возможно глупый вопрос, но я не понимаю, в чем проблема.
Большинство вопросов в Интернете что-то говорит об экземпляре, но это просто функция. не класс. В любом случае я просто попытался изменить аргумент:
newpose = rotate_rpy(mypose, mypose, rotateang)#enbug
тогда
TypeError: rotate_rpy() takes 2 positional arguments but 3 were given
и
newpose = rotate_rpy(mypose)#enbug
тогда
TypeError: rotate_rpy() missing 1 required positional argument: 'rotvec'
Я верю, что это глупо, но
newpose = rotate_rpy()#enbug
тогда
TypeError: rotate_rpy() missing 2 required positional arguments: 'posvec' and 'rotvec'
Я в замешательстве
3 аргумента - слишком много аргумента
2 аргумента - 1 аргумент пропущено
1 аргумент - 1 аргумент отсутствует
0 аргументов - 2 аргумента отсутствуют
Это не соответствует. Я понятия не имею. Пожалуйста, помогите мне ...
Полный код ниже:
#coding:utf-8
import numpy as np
def rotate_roll (th):
_rot_vec_roll = {
{ 1., 0. , 0.},
{ 0., np.cos(th), np.sin(th)},
{ 0., - np.sin(th), np.cos(th)}
}
return _rot_vec_roll
def rotate_pitch (th):
_rot_vec_pitch = {
{ np.cos(th),0. , np.sin(th)},
{ 0., 1., 0.},
{- np.sin(th),1., np.cos(th)}
}
return _rot_vec_pitch
def rotate_yaw (th):
_rot_vec_yaw = {
{ np.cos(th), np.sin(th), 0.},
{ - np.sin(th), np.cos(th), 0.},
{ 0., 0., 1.}
}
return _rot_vec_yaw
# R2 = A * R1
# A = roll_vec * pitch_vec * yaw_vec
Vector = np.ndarray(shape=(1,3), dtype=np.float)
def rotate_rpy(posvec: Vector, rotvec: Vector) -> Vector :
return np.dot(np.dot(np.dot (posvec, rotate_rpy(rotvec[0]) ), rotate_pitch(rotvec[1]) ), rotate_yaw(rotvec[2]))
mypose = np.ndarray(shape=(1,3), dtype=np.float)
mypose = np.array([3.0,1.0,1.0], dtype=float)
print(mypose)
base = np.pi / 6.0
rotateang = np.ndarray(shape=(1,3), dtype=np.float)
rotateang = np.array([base, base/2.0, base], dtype=float)
print(rotateang)
newpose = np.ndarray(shape=(1,3), dtype=np.float)
newpose = rotate_rpy(mypose, rotateang)#enbug
print(newpose);
и полная ошибка ниже:
[ 3. 1. 1.]
[ 0.52359878 0.26179939 0.52359878]
Traceback (most recent call last):
File "rotation_matrix.py", line 50, in <module>
newpose = rotate_rpy(mypose, rotateang)#enbug
File "rotation_matrix.py", line 35, in rotate_rpy
return np.dot(np.dot(np.dot (posvec, rotate_rpy(rotvec[0]) ), rotate_pitch(rotvec[1]) ), rotate_yaw(rotvec[2]))
TypeError: rotate_rpy() missing 1 required positional argument: 'rotvec'