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;
}