作者etrexetrex (moonet)
看板GameDesign
標題Re: [求救]關於遠近的演算法
時間Fri Apr 4 02:00:17 2008
※ 引述《KanoLoa (諾)》之銘言:
: 最近寫遊戲,需要將2D的圖片模擬成有遠近之分的效果。
: 我在定位座標位置的時候遇到了很大的困難 /_\
: 請看 http://w5.loxa.com.tw/hua0004/mathptt.GIF
: 這算是從中間望向遠處的概念圖?
: 右圖本來是一個矩形的圖形,
: 經過放遠之後,會變得像左邊的圖一樣。
: 而 A , B 的大小是我可以決定的,相當於決定在A點時,縮放的大小。
: 左圖Y1~Y8 彼此間距離相同。
: 但是經過放遠之後,彼此的間隔大小將會是不同的。
: ==========
: 我的問題就出在,假設有某物件,原本是在總長 3/7 的位置。
: 我該如何找出轉換之後,它應該所在的位置呢?
: (就如圖,右邊的紅線在Y3,Y4之間,轉換之後的高度就不再是 3/7 的位置 )
: 請問有什麼方法或是公式能求解嗎?
: 我只會用對角線不斷的找出中心點,(如左圖畫出等份的方法,有小灰線)
: 但是這樣永遠只能分出 2^n等份,不在 k/2^n 的位置會很難找 ,EX: 1/3 。
: 我希望是,決定A,B的長度、原本所在的比例位置,
: 就能找出轉換後的位置。
: 想請好心的版友幫忙,或是給點提示,拜託了 O_Q
: (我有貼在 math 跟 ask 版問過, 無人問津 /__\。)
一消失點座標系
http://etrex.blogspot.com/2008/03/blog-post_14.html
延伸產物 (含有c++ code)
http://etrex.blogspot.com/2008/03/beta.html
原理:
假設Y有100段
根據三角形相似原理得出 Y1:Y2 = Y2:Y3 ... 以此類推
設Y1 = 1 (最近的Y單位長度應與X單位長度相同)
設Y100 趨近於0 (假設Y100 = 0.01)
解公比 r
Y100 = r^99
Y100 ^ (1/99) = r
得到 r = pow( Y100 , 1/99 ) //C++語法 不過我是用1/100
想要 Yn 座標
就必須求等比級數
Sn = y1 * (1-r^n) / (1-r) //y1 = 1 所以
Sn = (1-r^n) / (1-r)
但我在程式中是寫 1 - r^n
PS:Y座標會影響X座標... 看看我的code吧 XD
--
http://etrex.blogspot.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.71.124
→ etrexetrex:我竟然在文章裡寫註解!! 04/04 02:03
※ 編輯: etrexetrex 來自: 61.231.71.124 (04/04 02:35)
→ etrexetrex:我寫的邏輯跟我code的邏輯好像不同,但我忘了之前想啥 04/04 02:45
→ KanoLoa:哇哦 感謝!!!! 我先努力參透 感激 ! 04/04 03:00
→ etrexetrex:好像有點想起來了 我寫的邏輯是不可行的 但code的可以 04/04 04:07
→ etrexetrex:是因為文章中的計算方式 Y總長是未知數 無法控制 04/04 04:07
→ etrexetrex:但code則是總長度以等比方式遞減來求得第n項 04/04 04:08
→ etrexetrex:因此可能產生小誤差 0.0 04/04 04:10
推 KanoLoa:感謝 繼續參透...+_+ 04/04 14:42
推 pthuang:還好你是用 C++ 不用打/*!@$%^&*/ XD 04/04 23:47
→ etrexetrex:XD 04/05 00:23
推 Bencrie:C也可以用 // 啊 04/05 16:23
推 doomleika:標準不行喔XD能吃的是compiler自己加的 04/05 18:07
推 godfat:C99 可以 04/05 23:55
→ doomleika:唔._.感謝指正orz 04/06 03:00
推 KanoLoa:感謝 我搞定了!!! 04/06 03:34
推 pthuang:我猜d 大是 Dev-C++ 下的荼毒物 XD 04/07 09:05
→ doomleika:不,我是常常忘記有c99而已._. 04/07 13:04
→ pthuang:XD 04/07 15:03