1、點到直線距離推導
已知兩點,a(x1,y1),b(x2,y2),求點c(x3,y3)到a,b兩點所在直線的距離。
a、b兩點所在的直線:
如果不垂直,根據直線上兩點間斜率相等有:
整理后有
類比於:
那么,點到直線的距離:
在三角形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