js 判斷3D空間中 三點共線
阿新 • • 發佈:2018-11-22
需要一個有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 }