文档反馈

问题文档片段

问题文档片段包含公式时,显示为空格。

提交类型
issue

有点复杂...

找人问问吧。

请选择提交类型

问题类型
规范和低错类

- 规范和低错类:

- 错别字或拼写错误,标点符号使用错误、公式错误或显示异常。

- 链接错误、空单元格、格式错误。

- 英文中包含中文字符。

- 界面和描述不一致,但不影响操作。

- 表述不通顺,但不影响理解。

- 版本号不匹配:如软件包名称、界面版本号。

易用性

- 易用性:

- 关键步骤错误或缺失,无法指导用户完成任务。

- 缺少主要功能描述、关键词解释、必要前提条件、注意事项等。

- 描述内容存在歧义指代不明、上下文矛盾。

- 逻辑不清晰,该分类、分项、分步骤的没有给出。

正确性

- 正确性:

- 技术原理、功能、支持平台、参数类型、异常报错等描述和软件实现不一致。

- 原理图、架构图等存在错误。

- 命令、命令参数等错误。

- 代码片段错误。

- 命令无法完成对应功能。

- 界面错误,无法指导操作。

- 代码样例运行报错、运行结果不符。

风险提示

- 风险提示:

- 对重要数据或系统存在风险的操作,缺少安全提示。

内容合规

- 内容合规:

- 违反法律法规,涉及政治、领土主权等敏感词。

- 内容侵权。

请选择问题类型

问题描述

点击输入详细问题描述,以帮助我们快速定位问题。

mindsponge.common.pre_compose

mindsponge.common.pre_compose(quaternion, rotation, translation, update)[源代码]

利用旋转矩阵rotation和辅助矩阵update更新输入的四元数quaternion和平移向量translation,并进行新的仿射变化过程,得到更新的平移向量。

旋转矩阵的过程如下:

update=(xx,xy,xz,yx,yy,yz)vectorquaternionupdate=(xx,xy,xz)x=(yx)y=(yy)z=(yz)transupdate=[(x,y,z)]newquaternion=quaternion+vectorquaternionupdatequaternionrotatedtransupdate=rotationtransupdatenewtranslation=translation+rotatedtransupdate

其中 vector_quaternion_updatequaternion 的相乘使用 quat_multiply_by_vec 函数相乘, rotationtrans_update 的相乘用 rots_mul_vecs 函数, translationrotated_trans_update 相加过程使用 vecs_add 函数。 再用生成的 new_quaternionnew_translation 进行仿射变换。仿射变换的过程参照 quat_affine API。

参数:
  • quaternion (Tensor) - 初始的待更新四元数,shape为 [(...,4)] 的Tensor。

  • rotation (Tuple) - 旋转矩阵 (xx,xy,xz,yx,yy,yz,zx,zy,zz) ,且xx, xy等均为Tensor且shape相同。

  • translation (Tuple) - 平移向量 (x,y,z) ,其中x, y, z均为Tensor,且shape相同。

  • update (Tensor) - 用于辅助更新的矩阵,shape为 [(...,6)] 的Tensor,最后一维前三个元素为代表旋转矩阵的四元数三维向量表示,参考 quat_multiply_by_vec

返回:
  • quaternion (Tensor) - 更新后的四元数,shape为 [(...,4)] 的Tensor。

  • rotation (Tensor) - 更新后的旋转矩阵 (xx,xy,xz,yx,yy,yz,zx,zy,zz) ,且xx, xy等均为Tensor且shape相同。

  • translation (Tensor) - 更新后的平移向量 (x,y,z) ,其中x, y, z均为Tensor,且shape相同。

支持平台:

Ascend GPU

样例:

>>> import numpy as np
>>> from mindsponge.common.geometry import pre_compose
>>> from mindspore.common import Tensor
>>> from mindspore import dtype as mstype
>>> np.random.seed(1)
>>> quaternion = Tensor(np.random.rand(4),dtype=mstype.float32)
>>> update = Tensor(np.random.rand(6),dtype=mstype.float32)
>>> rotation = Tensor(np.random.rand(9),dtype=mstype.float32)
>>> translation = Tensor(np.random.rand(3),dtype=mstype.float32)
>>> quaternion, rotation, translation = pre_compose(quaternion,rotation,translation,update)
>>> print(quaternion)
[ 0.27905196  0.82475466 -0.05600705  0.48864394]
>>> print(rotation)
(Tensor(shape=[], dtype=Float32, value= 0.516181), Tensor(shape=[], dtype=Float32, value= -0.365098),
Tensor(shape=[], dtype=Float32, value= 0.774765), Tensor(shape=[], dtype=Float32, value= 0.18033),
Tensor(shape=[], dtype=Float32, value= -0.837986), Tensor(shape=[], dtype=Float32, value= -0.515034),
Tensor(shape=[], dtype=Float32, value= 0.837281), Tensor(shape=[], dtype=Float32, value= 0.405564),
Tensor(shape=[], dtype=Float32, value= -0.366714))
>>> print(translation)
(Tensor(shape=[], dtype=Float32, value= 0.724994), Tensor(shape=[], dtype=Float32, value= 1.47631),
Tensor(shape=[], dtype=Float32, value= 1.40978))