用户工具

站点工具


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})$

已知三角形三点坐标求三角形内切圆圆心:设 $AB=c,AC=b,BC=a,A(x_{1},y_{1},z_{1}),B(x_{2},y_{2},z_{2}),C(x_{3},y_{3},z_{3})$ ,则内切圆圆心为 $({\frac {(ax_{1}+bx_{2}+cx_{3})} {(a+b+c)}},{\frac {ay_{1}+by_{2}+cy_{3}} {(a+b+c)}},{\frac {(az_{1}+bz_{2}+cz_{3})} {(a+b+c)}})$

5.关于四边形

圆内接四边形的海伦公式:半周长为 $P$ ,四边形的四边长为 $a,b,c,d$ ,则四边形的面积为 ${\sqrt {(P-a)(P-b)(P-c)(P-d)}}$

托勒密定理:圆内接四边形对边乘积和等于对角线乘积。(大概是过一个点做边使得两对三角形相似,然后两个式子加起来就好了)

对于任意四边形:我们设四条边长为 $a,b,c,d$ ,对角线长度为 $d_{1},d_{2}$ ,对角线中点的连线长度为 $M$ 。则有 $a^{2}+b^{2}+c^{2}+d^{2}=d_{1}^{2}+d_{2}^{2}+4M^{2}$ ,在一个三角形中做一条边的中线,然后有两条夹边的平方和等于二倍中线平方加底边平方的一半,然后反复套这个公式就好了。具体可以看这个链接: $http://m.1010jiajiao.com/czsx/shiti_id_416535c6bf26c87adf869805564d02b3$ 。

弓形面积:设半径为 $r$ ,角为 $A$ ,则这个弓形的面积为 ${\frac {r^{2}(A-sinA)} {2}}$

6.关于圆

已知四面体的四个点坐标求四面体内切圆圆心: ${\frac {(S_{abc}x_{4}+S_{abd}x_{3}+S_{acd}x_{2}+S_{bcd}x_{1})} {S_{sum}}}$ ,其余维坐标以此类推。

7.棱台

棱台体积: ${\frac {(S_{1}+S_{2}+{\sqrt {S_{1}S_{2}}})h} {3}}$ ,其中, $S_{1},S_{2}$ 表示上下底边, $h$ 表示棱台的高。

8.圆锥

已知圆锥表面积 $S$ ,求最大体积 $V$ ,二次函数搞一下,得到结果为 ${\frac {S} {12}}{\sqrt {\frac {2S} {\pi}}}$

9.圆台

圆台的体积: ${\frac {{\pi}(r_{1}^{2}+r_{2}^{2}+r_{1}r_{2})h} {3}}$

10.球冠

球冠的表面积:设球冠的高为 $H$ ,球的半径为 $R$ ,则球冠的表面积为 $2{\pi}RH$ 。

球冠的体积:参数同上,体积为 ${\frac {{\pi}H^{2}(3R-H)} {3}}$ 。

11.球扇形

当已知球半径和球冠部分的高时,参数同上,两部分加起来全约掉了,最后结果为 ${\frac {2{\pi}R^{2}H} {3}}$ 。表面积同理相加暴算即可,球冠部分搞定剩下就是底面圆周长乘总半径再对半就好了。

12.球面距离

给两个点的坐标,都在球面上,算出两个点的最短距离。算出两个点的夹角,然后走这个圆上的圆弧就行了。

2020-2021/teams/legal_string/王智彪/新计算几何总结.txt · 最后更改: 2021/09/10 21:25 由 王智彪