如何解决获取旋转线的坐标
我有2条线(A和B)由P1和P2(xyz)坐标定义。
p1_A = [5,10,3]
p2_A = [15,13,3]
p1_B = [6,20,3]
p2_B = [9,22,5]
和相应的旋转矩阵R将线A旋转为B:
R = array([[ 0.8468851,-0.29080408,-0.44521748],[ 0.22027131,0.95385981,-0.20403924],[ 0.48401051,0.07472916,0.87186546]])
然后,我计算了点积以旋转向量R.dot(vecA)
。
我不知道如何从这里继续。我需要旋转线A的(xyz)坐标。
编辑:
我尝试了hippozhipos的解决方案(红色虚线)旋转线A。我希望虚线在中点旋转(请参见绿色点),并且平行于蓝色(参考线)。
import matplotlib.pyplot as plt
p1_A = [5,5]
mid_point = np.array([10.,11.5,3. ])
p1_A_rot = multVecMatrix(p1_A,R)
p2_A_rot = multVecMatrix(p2_A,R)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_aspect('equal')
ax.set_xlim([0,23])
ax.set_ylim([0,23])
ax.plot([p1_A[0],p2_A[0]],[p1_A[1],p2_A[1]],'r')
ax.plot(t0_cent[0],t0_cent[1],'go')
# Reference
ax.plot([p1_B[0],p2_B[0]],[p1_B[1],p2_B[1]],'b')
# Rotated
ax.plot([p1_A_rot[0],p2_A_rot[0]],[p1_A_rot[1],p2_A_rot[1]],'r')
解决方法
对于A线,您有2个点和一个旋转矩阵。因此,要获得旋转,只需将代表2个点的向量与旋转矩阵相乘即可。这是执行此操作的功能:
def multVecMatrix(vec3,mat3):
x = vec3[0] * mat3[0][0] + vec3[1] * mat3[1][0] + vec3[2] * mat3[2][0]
y = vec3[0] * mat3[0][1] + vec3[1] * mat3[1][1] + vec3[2] * mat3[2][1]
z = vec3[0] * mat3[0][2] + vec3[1] * mat3[1][2] + vec3[2] * mat3[2][2]
因此要获取A行的旋转矢量:
rotatedP1_A = multVecMatrix(P1_A,R)
rotatedP2_A = multVecMatrix(P2_A,R)
工作示例:
p1_A = [5,10,3]
p2_A = [15,13,3]
R = [[ 0.8468851,-0.29080408,-0.44521748],[ 0.22027131,0.95385981,-0.20403924],[ 0.48401051,0.07472916,0.87186546]]
def multVecMatrix(vec3,mat3):
x = vec3[0] * mat3[0][0] + vec3[1] * mat3[1][0] + vec3[2] * mat3[2][0]
y = vec3[0] * mat3[0][1] + vec3[1] * mat3[1][1] + vec3[2] * mat3[2][1]
z = vec3[0] * mat3[0][2] + vec3[1] * mat3[1][2] + vec3[2] * mat3[2][2]
return [x,y,z]
rotatedP1_A = multVecMatrix(p1_A,R)
rotatedP2_A = multVecMatrix(p2_A,R)
print(rotatedP1_A,rotatedP2_A)
,
要使一条与B
平行的线,不需要旋转矩阵。
计算B
行的方向向量并将其添加到A
的中间
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。