作者hirabbitt (兔子)
看板Programming
標題[問題] 內積求夾角 計算精確度不足時
時間Fri Nov 12 11:03:14 2010
兩向量(x,z) (x1,z1)求夾角
公式thita =
cos^-1((x * x1 + z * z1) / (((x * x + z * z) * (x1 * x1 + z1 * z1))^0.5));
但是當(x,z)=(-0.08, 9.7)
(x1,z1)=(-0.08, 9.8)時
Math.acos裡的值會大於1
造成thita=NaN
請問這要怎麼解決呢?
--
◤ __ \__◣
◢◤◢◤ ψhirabbitt
◢ ◤ ◢███◣
◢███◣
妳是我 █████
█████ 你是我
██
●█
● █▇███
最愛的寶貝 ██
╱╲ ●◥█████◣● 最寶貝的愛
◥
╱█
╱╱ ● ◥████ ˇ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.13.127.91
1F:→ proach:你用float?改用double試試看囉 114.43.192.101 11/12 11:11
2F:推 ericinttu:加個判斷式, 超過值域範圍就調回來 59.117.125.198 11/12 12:26
3F:→ hirabbitt:好 謝謝 163.13.127.91 11/12 16:40
4F:推 latinboy:可以把程式碼放上來嗎 我用float還是正確 58.115.36.65 11/12 22:49
5F:→ hirabbitt:我已經改寫了耶0.0> 114.45.173.67 11/14 12:25
6F:→ hirabbitt:你這樣一說 搞不好真的是我也錯 114.45.173.67 11/14 12:25
7F:→ hirabbitt: 寫 114.45.173.67 11/14 12:26
8F:→ hehechang:你要不要先把向量先個別"正規化" 211.74.209.114 11/14 21:49
9F:→ hehechang:就是各分量除以所屬向量的長度 211.74.209.114 11/14 21:50
10F:→ hehechang:再直接將正規化後兩向量做內積就是cos值 211.74.209.114 11/14 21:54
11F:→ hehechang:雖然我說的跟你的式子其實沒有分別 211.74.209.114 11/14 21:55
12F:→ hehechang:但是這樣應該會準確許多... 211.74.209.114 11/14 21:58
13F:→ hirabbitt:順序的問題? 163.13.127.91 11/19 14:18
14F:推 hehechang:將這兩個向量除各自的長度變成單位向量 203.70.252.63 11/20 11:07
15F:→ hehechang:再將這兩個單位向量直接內積就是cos值 203.70.252.63 11/20 11:08
16F:→ hehechang:十進位小數轉成浮點數會產生誤差 203.70.252.63 11/20 11:15
17F:→ hehechang:你的式子沒錯但會將轉換產生的誤差放大 203.70.252.63 11/20 11:16
18F:→ hehechang:這只是我的想法 參考看看囉 203.70.252.63 11/20 11:42