给定直线上两点p 1 p1p1、p 2 p2p2以及平面上一点p 0 p0p0,利用点到直线距离公式求出结果,需要先求出直线的一般式方程,再代入公式求解。
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
//计算点到直线距离首先要算出直线方程,直线方程此处采用一般式: Ax+By+C=0
//假设直线上两点(x1,y1) (x2,y2)
//A=y2-y1 B=x1-x2 C=x2*y1-x1*y2
//求出直线方程后直接带入点到直线距离公式:
//d=|Ax0+By0+C|/sqrt(A^2+B^2)
float getDistanceFromPoint(vector<int>& p0, vector<int>& p1, vector<int>& p2) {
if (p1[0] == p2[0] && p1[1] == p2[1]) {
//两点重合,直接按点之间距离计算
return sqrt((p0[0] - p1[0]) * (p0[0] - p1[0]) + (p0[1] - p1[1]) * (p0[1] - p1[1]));
}
//点P0到P1 P2构成直线的距离
float A = p2[1] - p1[1];
float B = p1[0] - p2[0];
float C = p1[1] * p2[0] - p1[0] * p2[1];
float distance = abs(A * p0[0] + B * p0[1] + C) / sqrt(A * A + B * B);
return distance;
}
int main()
{
int n;//多少组数据
std::cin >> n;
int p0_x, p0_y, p1_x, p1_y, p2_x, p2_y;
vector<int> p0, p1, p2;
float dis = 0.0;
for (int i = 0; i < n; i++) {
std::cin >> p0_x >> p0_y;
std::cin >> p1_x >> p1_y;
std::cin >> p2_x >> p2_y;
p0 = { p0_x, p0_y };
p1 = { p1_x, p1_y };
p2 = { p2_x, p2_y };
dis = getDistanceFromPoint(p0, p1, p2);
cout << dis << endl;
}
}
原文链接:https://blog.csdn.net/Duke_yuan/article/details/126235714