开门见山,将问题描述如下:
程序中要判断点在三角形内,我是用的面积法写的程序,假设三角形ABC和平面一点P,三角形ABC面积为S,P和三角形ABC任意两个顶点组成的3个三角形的面积分别为S1、S2、S3
程序        if(S==S1+S2+S3){
             ;
             ;
            }
问题是S、S1、S2、S3是带有小数位的foloat基本数据类型,本应该是三角形内的点P也被判断成不满足等式了,导致if语句块无法执行,请问这种情况怎样处理!

解决方案 »

  1.   

    首先,float的精度不够,应该用double,其次,你这个判断方法准确么?这个仅仅是理论上的值,在计算三角形的面积的时候,你得到的一定是准确的,保证没有四舍五入?如果有,就会有精度损失,.........
      

  2.   

    用矢量叉乘来判断
    如果 P 点在三角形内部
    那么从三角形的3顶点 A、B、C 到P 的矢量与边乘积都是大于 0 的
    AP * AB > 0
    BP * BC > 0
    CP * CA > 0
      

  3.   

    BigDecimal 使用这个类可以避免浮点数精度丢失,内含浮点书计算方法,不知道你的这种面积判定方法是不是否严谨,感觉keeya0416 的矢量算法可能会更好BigDecimal 类的计算方法:
    Add max(addend.scale(), augend.scale()) 
    Subtract max(minuend.scale(), subtrahend.scale()) 
    Multiply multiplier.scale() + multiplicand.scale() 
    Divide dividend.scale() - divisor.scale() 
      

  4.   

    LZ可以把等号换成Math.abs(S-S1-S2-S3)<0.001之类的