點到直線距離計算及g++編譯


1、點到直線距離推導

 

已知兩點,a(x1,y1),b(x2,y2),求點c(x3,y3)a,b兩點所在直線的距離。

ab兩點所在的直線:

  如果不垂直,根據直線上兩點間斜率相等有:

  整理后有

 

  類比於: 

  那么,點到直線的距離:

  在三角形cMN中,根據面積相等有:

帶入坐標點得:

 

2、代碼

linux系統編寫

在終端terminal中執行

 vim calPoint2LineDistance.cpp

在該cpp中寫代碼如下:

#include<iostream>
#include<stdlib.h>  //abs()
#include<math.h>    //sqrt()

using namespace std;

int main(int argc, char* argv[]){
    //argv: 0 is self, 1,2,3,4,5,6 are x1,y1,x2,y2,x3,y3
    cout<<"argc is:"<<argc<<endl;
    if(argc!=7){
        cout<<"need at least three points"<<endl;
        return 0;
    }
    float x1,y1,x2,y2,x3,y3;
    x1 = *argv[1], y1 = *argv[2], x2 = *argv[3], y2 = *argv[4], x3 = *argv[5], y3 = *argv[6];
    if(x1 == x2){
        cout<<"vertical,point2line distance is:"<<abs(x3-x1)<<endl;
        return abs(x3-x1);
    }
    else{
        float d = abs((y1-y2)*x3+(x2-x1)*y3+(x1*y2-y1*x2))/sqrt(pow(y1-y2,2)+pow(x2-x1,2));
        cout<<"point2line distance is:"<<d<<endl;
        return d;
    }
}

  

3、編譯及使用

g++編譯:

g++ calPoint2LineDistance.cpp -o calPoint2LineDistance.out

-o 編譯選項為將產生的可執行文件用指定的文件名,此處指定的是calPoint2LineDistance.out,不指定的話,默認是a.out。

 

使用:

./calPoint2LineDistance.out  2 0 0 2 2 2

計算點(2,0)、(0,2)與點(2,2)之間的距離。

 

輸出:

argc is:7

point2line distance is:1.41421

 

下載:

calPoint2LineDistance.out 下載地址:https://pan.baidu.com/s/1LOoCcAwwXfF9MVFtEoQIaA ,密碼:24a9

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM