1. 程式人生 > >js 判斷3D空間中 三點共線

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
      }