1. 程式人生 > >【C\C++】空間中求一點到兩點所構成的直線的距離

【C\C++】空間中求一點到兩點所構成的直線的距離

最近在做葉面重建的工作,構建葉面TIN的演算法中會用到3維中點到直線的距離方程,一開始以為像二維一樣有公式之類的,後來找了一下沒有找到,就寫了一個函式,分享一下

double dis_3D(Point a,Point b,Point s){
    double ab=sqrt(pow((a.X-b.X),2.0)+pow((a.Y-b.Y),2.0)+pow((a.Z-b.Z),2.0));
    double as=sqrt(pow((a.X-s.X),2.0)+pow((a.Y-s.Y),2.0)+pow((a.Z-s.Z),2.0));
    double bs=sqrt(pow((s.X-b.X),2.0
)+pow((s.Y-b.Y),2.0)+pow((s.Z-b.Z),2.0)); double cos_A=(pow(as,2.0)+pow(ab,2.0)-pow(bs,2.0))/(2*ab*as); double sin_A=sqrt(1-pow(cos_A,2.0)); return as*sin_A; }

基本數學原理就是用餘弦定理求出夾角,再求正弦值,然後求出高,
即點到線的距離。