作者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