iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
1

引言

接續前一篇的投影介紹,今天要正式來應用線性代數中的投影公式,跨過第一道門檻—「將物體三維座標轉成二維座標」。


概念

這邊我直接放一張概念圖,更好來介紹投影公式:
https://ithelp.ithome.com.tw/upload/images/20190918/20111429wIjRt9B3Mz.png

大家可以從這張圖看到兩點:

  1. 原本三維物體的Z分量,被轉換為X分量變化快慢(Z分量愈大,離觀察者愈遠,X分量變化愈慢。明明移動很多,在螢幕上只移動一點點),因此可捨棄掉Z座標,目標達成!

  2. 物體、中央線、眼睛、螢幕形成了兩層直角三角形,一共有四組重要的邊,分別是:

    • 眼睛到螢幕的距離(取名為esd)
    • 眼睛到物體的Z軸距離(取名為eod)
    • 已知的,實際上三維物體偏離中央的距離(ax)
    • 想知道的,因Z軸偏離距離而影響的X軸偏移距離(bx)

    我們想知道的,就是那個在螢幕上的X軸偏移距離(bx),這代表著轉換後二維座標的X座標,最後我們只要同理類推就可以知道二維座標的Y座標,而得知整個二維座標,這樣一來目標就達成啦!


公式

我們直接由那四個資訊,加上那兩層直角三角形的關係(小直角三角形的高比上大直角三角形的高,等於小直角三角形的底比上大直角三角形的底,也就是相似三角形的關係啦~),可以得出公式:
https://chart.googleapis.com/chart?cht=tx&chl=%5Cfrac%7Bbx%7D%7Bax%7D%20%3D%20%5Cfrac%7Besd%7D%7Beod%7D

移項一下:

https://chart.googleapis.com/chart?cht=tx&chl=bx%20%3D%20ax%20%5Ctimes%20%5Cfrac%7Besd%7D%7Beod%7D

求得bx啦!也就是投影後的二維X座標哦,同理Y座標:

https://chart.googleapis.com/chart?cht=tx&chl=by%20%3D%20ay%20%5Ctimes%20%5Cfrac%7Besd%7D%7Beod%7D

這樣也求得by了,也就是我們投影後的二維座標是:(bx, by)

只要將每個三維座標點的(bx, by)一一繪製到螢幕上,就顯示出了原三維物體的二維投影啦~


總結

經過了這些推導與觀察,大家可以發現投影的概念是將想要捨棄的Z分量,轉為X,Y分量移動的難易程度

這個在生活中也是很好觀察的,相信大家都有抬頭看過飛機飛在空中過吧!不知道大家有沒有發現,飛機速度明明那麼快,為什麼我抬頭看的時候看起來飛得好慢...

其實不是飛機真的飛得慢,只是飛機離我們太遠(Z軸方向距離遠),我們的觀測平面上(X,Y平面)飛機移動的程度就會非常小

這就是投影的原理,直接模擬這種特性,讓人的大腦誤以為二維中存在三維物體,只是一種錯覺罷了~


上一篇
[11屆鐵人賽Day4] 3D投影—三維映射到二維
下一篇
[11屆鐵人賽Day6] C語言實作—3維座標投影2維座標
系列文
若沒有遊戲引擎、合作夥伴...做得出遊戲嗎? 不試試看不知道吧? [使用C語言]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言