抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

靖待的技术博客

小清新IT旅程 | 为中华之崛起而读书



  关于三维坐标变换的一些思考。 
  从两条相交直线说起。
  
  

从最简单的情况入手,求空间两条相交直线AB、BC的夹角,AB和BC相交于B点,已知ABC三点三维坐标。
假设两条直线向量分别为a(x1,y1,z1),b(x2,y2,z2),根据公式cosα=a·b/(|a|*|b|)=(x1x2+y1y2+z1z2)/[√(x1^2+y1^2+z1^2)+√(x2^2+y2^2+z2^2)] 可直接求得。

情况变一变:
以此两条直线中的某一条为基准(为z’轴),求另一条直线关于基准线的x’、y’、z’轴(新的基准坐标系)夹角。

如果不用矩阵的做法,求解很复杂:
以AB为新的坐标系Z’轴为例,O为原坐标系原点。
B’(0,0,0),可求AB点距离s,则A’(0,0,s)。这还是比较容易的,关键是求C’坐标。
首先要求z轴和AB之间的各种角度,想象从Z轴先延x轴平移绕x轴旋转,再延y轴平移绕y轴旋转,最后延z轴平移绕z轴旋转。同理,C点做同类运动,得到C’。
千辛万苦得到C’还没完,再将B’C’分别向x’o’y’、y’o’z’、z’o’x’面投影,求关于基准线的夹角。方可算出所求。

很明显,这种方法显然不适用在3D中。
这个问题其实等价于将世界坐标系转换为物体坐标系。,矩阵的作用就发挥广大。

令原坐标系为M=(i,j,k)T(转置),变换后N=(i’,j’,k’)T,i=(1,0,0),j=(0,1,0),k=(0,0,1)
原坐标系中一点P为(x,y,z),则P’=((x,y,z)-O’)N^(-1) N^(-1)指N的逆矩阵 (若N为正交矩阵,无需求逆矩阵,求转置矩阵即可。)

推导:∵P=O+(x,y,z)M=O’+(x’,y’,z’)N
∴(x’,y’,z’)=((x,y,z)M+(O-O’))N^(-1)
此时O’=(0,0,0),并带入M,则上式得证。

综上所述,讨论的情况实质就是进行了坐标系的转换。目的是求C’坐标,假设A(a1,b1,c1),B(a2,b2,c2),C(a3,b3,c3),那么根据公式C’=((a3,b3,c3)-(a2,b2,c2))N^(-1),问题就转化为求N。记N=MK,K=M^(-1)N,也就是说,K是将i,j,k装换为i’,k’,j’的变换矩阵。
N^(-1)=(MK)^(-1)=K^(-1)M^(-1)
∴(x’,y’,z’)=((x,y,z)M+(O-O’))K^(-1)M^(-1)
=((x,y,z)+(-O’))K^(-1) K=N

怎么求K呢?

可以参考这篇文章图形学1-三维坐标系间的变换矩阵推导

看似也挺麻烦,其实推导占据了大量篇幅,真正使用时直接套就好了。

评论