当前位置:首页>真相 > 

三维中的坐标系如何转换

三维中的坐标系如何转换

三维中的坐标系如何转换

本文核心词:

0x00 前言

大家吼啊,我们又见面了!这次我们要说说三维中的坐标系如何转换。但是那,在这之前我们需要先知道二维中的怎么转换。这样便更容易清楚三维中的坐标系如何转换啦。注意!文章中的转换都使用齐次坐标。如果不明白什么是齐次坐标,请看看上一篇科普专栏。如果不懂矩阵,可以先阅读高中数学。

0x01 二维坐标系的变换

对于点P‘我们有2个坐标系来表示他的位置

这里有个点P’我们不难看出来,它的位置可以用(x,y)和(x,y)来表达。当然,我们也可以根据上一章说到的方式可以得到

|x‘ || x ||1 0Δx |

| y’ | = | y | | 01Δy |

| 1 || 1 ||0 01 |

这个我觉得不需要过多的解释了,非常容易理解。那么,二维中的旋转我们应该如何理解呢?

对于某点(x,y)的作图

我们假设点(x,y)的原坐标系X,Y绕原点旋转了Θ度,对此我们可以得到一个变换矩阵:

|cosΘ sinΘ0 |

R(Θ)=|cosΘ -sinΘ0 |

|001 |

也就是原坐标和旋转后坐标的关系是:

|x’ ||x ||cosΘsinΘ0 |

|y‘ | = |y||cosΘ -sinΘ0|

|1 ||1 || 001 |

嗯,至少到此为止,我们的进展都很顺利。但是很不幸的,在三维里面,你能拿到的往往都不是你现在能获得到的旋转角度Θ。换句话说,在三维里面,你可能需要2个旋转角Θ才能完成坐标系的旋转。这样岂不是太麻烦了?

0x02 在二维旋转中找找其他的方式

我们来试试看物理的方式?我们将两个坐标系看成两个力,将他们进行分解试试看:

生成的3个矢量(x+y),y和x

我们先将(x+y)这个力也分解成x’,y’这2个力,这时候我们来看看原来的变换矩阵:

|x’ ||x | |cosΘsinΘ0 |

|y‘ | = |y| |cosΘ -sinΘ0|

|1 ||1 ||001 |

如果你是一个数学和物理都不错的人,那么你应该会发现,第一列(cosΘ,sinΘ,0)和第二列(cosΘ,-sinΘ,0)这两个都正好是新坐标x’,y’在原坐标中的方向矢量,而且是正交的单位矢量。

正交的单位矢量也意味着什么呢?这也表明了,这正好是变换中,新坐标的单位矢量。我们这时候就可以使用这样的单位矢量来进行变换了。将这个理念代入三维中试试看?

0x03 三维的坐标系变换

2个坐标系,其中(X,Y,Z)为新坐标原点

这时候我们便可以将(x,y,z)这个坐标系的三个方向矢量分别规格化,对此我们就可以得到用原坐标系定义的3个正交单位矢量。

u=(ux,uy,uz)

v=(vx,vy,vz)

w=(wx,wy,wz)

对此我们可以将新坐标原点位置(x,y,z)加以利用,便可以得到变换矩阵:

T3(表示平移)XR3(表示旋转)

|1000 | |uxvxwx0|

= |0100| |uyvywy0 |

|0010| |uzvzwz0|

|-x-y-z1| |0001 |

搞定,这样就能够十分简单的进行三维中坐标系之间的变换了!