作者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
1F:→ etrexetrex:我竟然在文章里写注解!! 04/04 02:03
※ 编辑: etrexetrex 来自: 61.231.71.124 (04/04 02:35)
2F:→ etrexetrex:我写的逻辑跟我code的逻辑好像不同,但我忘了之前想啥 04/04 02:45
3F:→ KanoLoa:哇哦 感谢!!!! 我先努力参透 感激 ! 04/04 03:00
4F:→ etrexetrex:好像有点想起来了 我写的逻辑是不可行的 但code的可以 04/04 04:07
5F:→ etrexetrex:是因为文章中的计算方式 Y总长是未知数 无法控制 04/04 04:07
6F:→ etrexetrex:但code则是总长度以等比方式递减来求得第n项 04/04 04:08
7F:→ etrexetrex:因此可能产生小误差 0.0 04/04 04:10
8F:推 KanoLoa:感谢 继续参透...+_+ 04/04 14:42
9F:推 pthuang:还好你是用 C++ 不用打/*!@$%^&*/ XD 04/04 23:47
10F:→ etrexetrex:XD 04/05 00:23
11F:推 Bencrie:C也可以用 // 啊 04/05 16:23
12F:推 doomleika:标准不行喔XD能吃的是compiler自己加的 04/05 18:07
13F:推 godfat:C99 可以 04/05 23:55
14F:→ doomleika:唔._.感谢指正orz 04/06 03:00
15F:推 KanoLoa:感谢 我搞定了!!! 04/06 03:34
16F:推 pthuang:我猜d 大是 Dev-C++ 下的荼毒物 XD 04/07 09:05
17F:→ doomleika:不,我是常常忘记有c99而已._. 04/07 13:04
18F:→ pthuang:XD 04/07 15:03