点到直线距离

给定直线上两点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

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值