unity 浮點數的不精確引發的地磚縫隙

2021-07-24 00:24:52 字數 741 閱讀 1732

unity中,大多數時候,都需要用 float 型別,

與 int 型別不同, float 型別在進行計算的時候,會有誤差,

或多或少。

有乙個問題,就是誤差是會累積的,

假如,一次誤差 0.001是無傷大雅的,

但是,累積到 0.1的時候,可能,就會出現問題,

最直觀的情況,就是 地圖的拼接,

大多地圖都是由地塊 ,一塊一塊拼接而成,

假如,兩個地塊之間的誤差,僅僅只有 0.1而已,

但是,從畫面上,很有可能,直接就能看出 接縫,

此時,就是穿幫了。

可是,float 是無法真正的精確的,誤差是一定會存在的,

那麼,怎麼辦呢?

辦法就是盡可能的減少誤差。

假如,有 a 和 b 兩個物體,

都在地圖上,乙個座標是 (0,0,1),

乙個座標是 (0,0,2)

假如他們的位置是相對靜止的,

那麼,當畫面動起來時,

我們可能讓a 和 b 的都加上同乙個偏移量,

但是,這不是最好的辦法,這麼做,誤差仍然還會累積,

有乙個辦法,可以讓誤差不再累積,

b相對於 a 的座標是 固定的,

所以,讓 a 來移動, b 動態獲取 a的座標,再加上相對位置的座標,

就變成了,即使 a 有誤差累積,但是, b 相對於 a 的位置,始終都是固定的,

兩個地磚之間,相對的位置不發生變化,那麼,地磚之間接縫的問題,就不會出現了。

2 6 精確表達浮點數

任何乙個無限迴圈小數或有限小數都可以表示為分數的形式。1 有限小數 假設為a.b1b2b3b4b5 我們可以表示為 a b1b2b3b4b5 10 5 2 無限迴圈小數 假設為a.b1b2b3b4b5b6 c1c2c3c4 a.b1b2b3b4b5b6 c1c2c3c4 ab1b2b3b4b5b6....

PHP浮點數的精確計算BCMath

php bcmath bc是binary calculator的縮寫。bc 函式的引數都是運算元加上乙個可選的 int scale 比如string bcadd string lef tope rand str ingleftoperand,string right operand int scal...

Python 執行精確的浮點數運算

需要對浮點數執行精確的計算操作,並且不希望有任何小誤差的出現.浮點數的乙個普遍問題是它們並不能精確的表示十進位制數。並且,即使是最簡單的 數 算也會產生小的誤差,比如 a 4.2 b 2.1 a b 6.300000000000001 a b 6.3 false false 是由於底層cpu和iee...