用户工具

站点工具


2020-2021:teams:legal_string:王智彪:新计算几何总结

这是本文档旧的修订版!


新计算几何总结

1.关于计算误差

少用三角函数、除法、开方、求幂、取对数。

比如能除一次不除三次: ${\frac {1.0} {2.0}}×{\frac {3.0} {4.0}}×5.0={\frac {1.0×3.0×5.0} {2.0×4.0}}$

比较时在不溢出的情况下尽量将除法变为乘法:

${\frac a b}>c \Leftrightarrow a>bc$

在不溢出整数范围的情况下,有时可以通过乘 $10^{k}$ 转化为整数运算,最后把结果转化为浮点数输出。

一般不输出 $-0$ 记得处理。

反三角函数有值域问题,比如 $acos(1.0000001)$ 会 $re$ 。

有的时候判断两个角相等需要看 $fabs(a1-a2)<eps||fabs(a1-a2)>2.0*pi-eps$ ,应该是用atan2判断 $180$ 度的时候,两边会相差 $2×pi$ 但其实是一个角。

2.关于 $atan2$

$atan2(0,0)=0,atan2(1,0)=pi/2,atan2(-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi$

所以新学了个处理 $atan2$ 函数的手法: $double\ tmp=atan2(a1);\ if(sgn(tmp)<0)\ tmp+=2*pi;$ ,这样得到的角就是 $[0,2×pi)$ 的了。

3.关于叉积,总记不住

$a$ 叉乘 $b$ 为正代表 $a$ 在 $b$ 的顺时针方向。反之为逆。

4.关于三角形

中线长,两次余弦定理: $M_{a}={\frac {sqrt(2(b^{2}+c^{2})-a^{2})} {2}}$

角分线长,三角形面积算两次: ${\frac {bccos({\frac {A} 2})} {b+c}}$ ,再通过二倍角公式化成 ${\frac {\sqrt {bc((b+c)^{2}-a^{2})}} {(b+c)}}$

内切圆半径: 设 $P$ 为半周长,

我们有 $r={\frac {S} {P}}={\frac {asinBsinC} {(sinA+sinB+sinC)}}={\frac {asinBsinC} {(sinBcosC+cosBsinC+sinB+sinC)}}={\frac {asinBsinC} {(sinB(cosC+1)+(cosB+1)sinC)}}={\frac {asin({\frac {B} 2})sin({\frac {C} 2})} {sin(\frac {B+C} 2)}}=4Rsin({\frac A 2})sin({\frac B 2})sin({\frac C 2})$

也有 $r={\frac {S} {P}}={\sqrt {{\frac {(P-a)(P-b)(P-c)} {P}}}}$ ,又因为 ${\frac r {P-a}}=tan({\frac A 2})$ ,全换了就有 $r=Ptan({\frac A 2})tan({\frac B 2})tan({\frac C 2})$

2020-2021/teams/legal_string/王智彪/新计算几何总结.1630826218.txt.gz · 最后更改: 2021/09/05 15:16 由 王智彪