日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

空间坐标系以及空间两三维坐标系转换矩阵解释

發布時間:2024/1/1 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 空间坐标系以及空间两三维坐标系转换矩阵解释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

空間坐標系以及空間兩三維坐標系轉換矩陣解釋

因為工作的原因,需要進行不同坐標系的一個轉換,在查閱了眾多的網頁之后,發現有用的沒幾個,而且眾多都是抄的同一篇文章,而且都是羅列以下旋轉的方式,幾乎沒有解釋旋轉角的物理意義,也不說這個旋轉角怎么得到的。在折騰了一天之后,終于弄清楚了,特意寫下來,既能有助于記憶,又能裝b,很好很強大。

基礎背景

空間三維坐標系轉換,大多出現在像我似的搞地圖的這群B人里,當然還有搞游戲的大佬們。所以需要對空間三維坐標系做一個小的總結,來防止忘記或者混亂。

具體圖形可百度,賴的放圖

  • 地心坐標系
    空間三維坐標系,左手系
  • 高斯坐標系
    在搞激光點云的人眼里,基本上就指的是,當前度帶(分3度帶和6度帶)中的高斯直角坐標系,右手系,點云中記錄的點坐標大多有經緯度坐標、高斯坐標,兩種坐標。
  • 像空間坐標系
    z軸正方向,與主光軸方向重合,x、y軸方向與相平面坐標系平行。右手系
  • 像平面坐標系
    xy軸方向與像素坐標系平行,單位為m,是一個物理坐標系
  • 像素坐標
    單位為像素,在與像平面坐標系進行轉換的時候,需要知道每個像素的物理尺寸

三維坐標系轉換

為了通用性,前邊的空間坐標系只做一個概念上的羅列,這里針對任意兩空間直角坐標系的相互轉換進行解釋。

  • 世界坐標系XYZ:僅僅用于表述,不代表物理意義上世界坐標系
  • 局部坐標系xyz
  • 旋轉角:重點需要搞清楚,這個旋轉角是從哪個坐標系旋轉到哪個坐標系,在地圖行業里的多傳感器的聯合標定中,這個旋轉角是由相應的標定文件提供的。

已知條件

  • 世界坐標系的三個坐標軸:world_x(1,0,0),world_y(0, 1, 0),world_z(0,0,1)
  • 局部坐標系的三個坐標軸:local_x(g,h,i),local_y(d,e,f)local_z(a,b,c)
    其中,局部坐標系的坐標軸坐標均為世界坐標系下的坐標值,這點非常重要,同時,兩空間三維坐標系還有個平移向量,因為只是很簡單的坐標值平移,這里就不再贅述,默認兩坐標系的原點相同。
  • 旋轉原理

    這里盜一張圖(找了好久,看到的一個良心博客 http://www.skcircle.com/?id=515)

    如上圖,P點為局部坐標系的z軸上一點,q為點P在世界坐標系ZOY平面上的投影點,r為點P在經過旋轉之后的對應點,如果你去查看了貼的那個網頁博客,請不要看他的旋轉方式,并不是大佬描述錯誤,而是不適用空間三維坐標系的相互轉換,因為這里涉及到一個很蛋疼的說法,這個旋轉矩陣描述的是A坐標系到B坐標系轉換方式

    世界坐標系到局部坐標系的旋轉矩陣R

    注意:XYZ與xyz,我都會嚴格注意,不會寫錯!(寫錯老子就改!看其他博客的時候,就深受其害),為了描述方便,世界坐標系的軸或者坐標都會用大寫的XYZ來代替,局部坐標用xyz來代替,而且為了防止0與O不好分辨,所有的0都用漢字零來表示

    問:如何理解旋轉矩陣究竟是描述的A到B,還是B到A?

    答:旋轉世界坐標系,使得世界坐標系與局部坐標系重合,那么得到的這個旋轉矩陣,描述的是,世界坐標系到局部坐標系轉換關系,用公式來表達

    local = R * world

    結合上方圖片:(注意理解旋轉角)

  • 逆時針旋轉世界坐標系X軸,使得局部坐標系的 z軸 與世界坐標系的 XOZ 平面共面,結合上圖(那個橢圓就是為了方便理解,而虛擬出來的點P的旋轉軌跡),要想OP出現在XOZ平面上,就需要逆時針旋轉X軸,旋轉的角度為θ(注意,α為向量夾角,范圍0 - 180,如果這個角不會求,要不,再去從小學開始復讀一下吧)。但是注意,旋轉角是有方向的,圖里的例子,如果要逆時針把OZ,旋轉到Oq,那么旋轉的角度應該是360 - α。
  • 注意:其實順時針也可以,只需要保證所有的軸都同時為逆時針或者順時針即可,不過大家都通用逆時針而已,所以,請把順時針給從腦子里刪除

    • 如何來獲取旋轉角度θ(而非向量夾角)
      就需要用到向量的叉乘,來確定向量的左右側。這里要將OZ旋轉到Oq,那么OZ就是基準,需要知道Oq在OZ的左側還是右側,圖里是在右側,與逆時針相反,用叉乘表示: OZ ? Oq 得到的向量與X軸的乘積小于零,那么旋轉角度就應該是θ = 360 - α,如果在OZ的左側的話,向量夾角就是旋轉角度,θ = α。

      旋轉的是X軸,那么矩陣描述應該為Rx

  • 經過步驟1之后,局部坐標系的z軸現在就表現為圖里的Or,接著逆時針旋轉世界坐標系的Y軸,使得世界坐標系的Z軸與局部坐標系得z軸重合,同理,觀察Or在OZ得左側,那么這一步得旋轉角度θ = β。
    旋轉的是軸,那么矩陣描述應該為Ry
  • 經過前兩步得旋轉,此時世界坐標系得Z軸與局部坐標系得z軸已經重合了,那么接著逆時針旋轉世界坐標系Z軸,就是一個簡單得二維上得旋轉了,就會很好理解了,如下圖所示

    同理,求出旋轉角θ,這次旋轉的是世界坐標系的Z軸,那么旋轉矩陣就是Rz,
  • 結束
    經過上邊的三步旋轉,就將世界坐標系,旋轉到了局部坐標系上,通過矩陣的左乘,就能得到世界坐標系到局部坐標系的旋轉矩陣R
    R = Rz * Ry * Rx

    完整坐標值形式(加上偏移值)
    local = R * world + T
    其中T為世界坐標系原點在 局部坐標系中的坐標

    局部坐標系到世界坐標系的旋轉矩陣

    但是現實中,往往是知道局部坐標系原點在世界坐標系中的坐標,因此,基本上都是求得局部坐標系到世界坐標系得旋轉矩陣(上邊的R,求個逆即可,自己玩去吧您那,賴的寫了)
    2021.11.12號,補充
    還是寫清楚吧,方便各位跟我一樣的小白。
    上邊的旋轉矩陣R,描述的是world到local的旋轉方式,那么將R求逆得到W,同時知道局部坐標系原點在世界坐標系中的坐標O,那么local坐標轉到world坐標的方式如下

    world = W * local + O

    總結

    以上是生活随笔為你收集整理的空间坐标系以及空间两三维坐标系转换矩阵解释的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。