To d983074(d983074) :
取一个值,如0.000000000001,当小于这个值得时候就认为等于0
这个办法我考虑过,问题是这个值如何取?不容易确定。因为
|r1×r2|=R1*R2*Sinα,α为r1和r2的夹角,而
|(r1×r2)·r|=(R1*R2*R*Sinα)*Cosβ,β为r1×r2和r的夹角。
可知Cosβ等于|r1×r2|除以|(r1×r2)·r|,若算出Cosβ从而算出
β,则可以根据β的值与90°之差小于某个值来判定,这“某个值”
容易确定,因为β的值与90°之差的几何意义就是点与边界的偏离
程度,若以点与边界的偏离程度不超过0.1度(1度约为111公里)为
判定边界点的允许误差,即可取该值为0.1。但Cosβ的计算可能就
有问题,因为分母中含有因子Sinα(这在边界比较密集时是很小
的值),估计容易带来溢出问题,就算不溢出,精度也难以控制。

解决方案 »

  1.   

    对函数Sinα用Taylor公式在0点展开,可获得∑k(n)*α<sup>n的形式,k(n)为f(x)=sinx在0点的n次导除以n的阶乘,误差值<k(n+1)*α<sup>(n+1),根据精度需要可用2或4个dword来表示系数k,得出符合需要的Sinα。{<sup>指上标}
    详细内容可参考《数学分析》
      

  2.   

    Sinα=(r1×r2)的模除以(R1*R2)
    而(r1×r2)=
         [(Cosλ1* Cosφ1)ex+ (Cosλ1*Sinφ1) ey+ (Sinλ1) ez]
       ×[(Cosλ2* Cosφ2)ex+ (Cosλ2*Sinφ2) ey+ (Sinλ2) ez]
       可知Sinα也是Φ1、λ1、Φ2、λ2的三角函数的表达式,所以我就拿不准这个表达式在分母时是否会带来溢出问题。我会先试验看结果如何。如各位有何新的想法请不吝赐教。