python - 如何有效地从python中的3个变形点找到旋转矩阵
问题描述
我试图通过使用我在两个坐标系中定义的 3 个单位向量来找到坐标系之间的旋转矩阵。
我目前正在使用我在 Mathmatics 上找到的方法,其定义如下:
在 python 中实现它的最小工作示例如下所示:
p1 = [math.sqrt(2)/2,math.sqrt(2)/2,0]
p2 = [-math.sqrt(2)/2,math.sqrt(2)/2,0]
p3 = [0,0,1]
TT = np.vstack([p1, p2, p3]).T
TM = np.eye(3)
for i in range (0,2):
for j in range(0,2):
TM[i][j] = math.cos(angle_between_vectors(np.eye(3)[:,j],TT[i,:]))
def vector_norm(data, axis=None, out=None):
data = np.array(data, dtype=np.float64, copy=True)
if out is None:
if data.ndim == 1:
return math.sqrt(np.dot(data, data))
data *= data
out = np.atleast_1d(np.sum(data, axis=axis))
np.sqrt(out, out)
return out
else:
data *= data
np.sum(data, axis=axis, out=out)
np.sqrt(out, out)
def angle_between_vectors(v0, v1, directed=True, axis=0):
v0 = np.array(v0, dtype=np.float64, copy=False)
v1 = np.array(v1, dtype=np.float64, copy=False)
dot = np.sum(v0 * v1, axis=axis)
dot /= np.linalg.norm(v0, axis=axis) * vector_norm(v1, axis=axis)
dot = np.clip(dot, -1.0, 1.0)
return np.arccos(dot if directed else np.fabs(dot))
有谁知道用更少的代码或更高的效率计算旋转矩阵的方法?
解决方案
推荐阅读
- c# - 如何获取列表中的第二个元素
- flutter - 从多个小部件更新 AppBar 中的购物车徽章计数器
- php - 在 wordpress 插件中使用 ajax 将数据插入自定义表的问题
- python - 如果对象存在,如果不在这里,将我移到这里,PYTHON>Django
- java - 使用 Groovy 计算 JSON 对象中的项目
- flutter - 没有名为“resizeToAvoidBottomPadding”的命名参数
- c++ - makefile 错误 lib/Scrt1.o 未定义对“main”的引用
- sql - Oracle REGEXP_LIKE 函数使用索引表扫描?
- python - 如果之前没有数字,Python 正则表达式会找到单个数字
- shell - 获取 sed:-e 表达式 #1,字符 41:未终止的 `s' 命令