js 判断3D空间中 三点共线

需要一个有x y z的数据结构  

class Point
        {
            constructor(a=0,b=0,c=0)
            {
               this.x=a;
               this.y=b;
               this.z=c;
            }
        }

  一个计算边长的函数 就是两点间距

function distance(a,b)
        {
            var x1=a.x-b.x;
            var y1=a.y-b.y;
            var z1=a.z-b.z;
            return Math.sqrt(x1*x1+y1*y1+z1*z1);
        }

检测是不是共线  跟二维空间应该一样吧

function collinear_3Points(a,b,c)//是否共线 海伦公式 S=sqrt(p(p-a)(p-b)(p-c)) p=(a+b+c)/2
      {
           var edge_A=distance(a,b);
           var edge_B=distance(b,c);
           var edge_C=distance(a,c);


           var p=0.5*(edge_A+edge_B+edge_C);
           if(p*(p-edge_A)*(p-edge_B)*(p-edge_C))return false; //面积大于零 就是一个三角形 三点不共线
            return true;

      }

测试

function main()
      {
          var a=new Point(1,0,0);
          var b=new Point(0,1,0);
          var c=new Point(0,0,1);
          var d=new Point(0,0.5,0.5);
          var e=new Point(3,2,1);

        console.log(collinear_3Points(a,b,c))//false
        console.log(collinear_3Points(b,c,d));//true
        console.log(collinear_3Points(a,b,e));//false
      }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值