c++
#include <iostream>
#include <cmath>
using namespace std;
struct Point{
int x,y;
Point(int x1,int y1){
x = x1;
y = y1;
}
};
//直线 a x + b y + c = 0
//点P(x,y)
double a,b,c;
//两点确定直线(a,b,c);
void getLine(Point A,Point B){
a = B.y - A.y;
b = A.x - B.x;
c = (B.x*A.y)-(A.x*B.y);
//cout<<a<<" "<<b<<" "<<c<<endl;
}
//求点P到由两点(A,B)确定的直线的距离
double get(Point P,Point A,Point B){
getLine(A,B);
double x = P.x,y = P.y;
double d=abs(a*x+b*y+c)/sqrt(pow(a,2)+pow(b,2)); //距离公式 = (Ax+By+C)/sqrt(a*a+b*b)
d=int(d*100+0.5)/100.00; //四舍五入保留两位小数(100(零的个数))
return d;
}
int main(){
cout<<get(Point({0,0}),Point({1,0}),Point({0,1}))<<endl;
return 0;
}
java
/**
* 点与直线距离
* @param x 点的x坐标
* @param y 点的y坐标
* @param x1 过直线的第一个点x坐标
* @param y1 过直线的第一个点y坐标
* @param x2 过直线的第二个点x坐标
* @param y2 过直线的第二个点y坐标
* @return
*/
private double pointLine(int x,int y,int x1,int y1,int x2,int y2){
double a,b,c;
a = y2 - y1;
b = x1 - x2;
c = (1.0*x2*y1)-(1.0*x1*y2);
double d=Math.abs(a*x+b*y+c)/Math.sqrt(Math.pow(a,2)+Math.pow(b,2)); //距离公式 = (|Ax+By+C|)/sqrt(A*A+B*B)
d=(int)(d*100+0.5)/100.00; //四舍五入保留两位小数(100(零的个数))
return d;
}